| 279 | } |
| 280 | |
| 281 | func keysByFeature(keys []database.CryptoKey, features []database.CryptoKeyFeature) (map[database.CryptoKeyFeature][]database.CryptoKey, error) { |
| 282 | m := map[database.CryptoKeyFeature][]database.CryptoKey{} |
| 283 | for _, feature := range features { |
| 284 | m[feature] = []database.CryptoKey{} |
| 285 | } |
| 286 | for _, key := range keys { |
| 287 | if _, ok := m[key.Feature]; !ok { |
| 288 | return nil, xerrors.Errorf("unknown feature: %s", key.Feature) |
| 289 | } |
| 290 | |
| 291 | m[key.Feature] = append(m[key.Feature], key) |
| 292 | } |
| 293 | return m, nil |
| 294 | } |
| 295 | |
| 296 | // minStartsAt ensures the minimum starts_at time we use for a new |
| 297 | // key is no less than 3*the default rotation interval. |