mitreid-connect
公開メンバ関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService クラス
org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService の継承関係図
Inheritance graph
org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService 連携図
Collaboration graph

公開メンバ関数

 DefaultJWTEncryptionAndDecryptionService (Map< String, JWK > keys) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
 
 DefaultJWTEncryptionAndDecryptionService (JWKSetKeyStore keyStore) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
 
void afterPropertiesSet ()
 
String getDefaultEncryptionKeyId ()
 
void setDefaultEncryptionKeyId (String defaultEncryptionKeyId)
 
String getDefaultDecryptionKeyId ()
 
void setDefaultDecryptionKeyId (String defaultDecryptionKeyId)
 
JWEAlgorithm getDefaultAlgorithm ()
 
void setDefaultAlgorithm (JWEAlgorithm defaultAlgorithm)
 
void encryptJwt (JWEObject jwt)
 
void decryptJwt (JWEObject jwt)
 
Map< String, JWK > getAllPublicKeys ()
 
Collection< JWEAlgorithm > getAllEncryptionAlgsSupported ()
 
Collection< EncryptionMethod > getAllEncryptionEncsSupported ()
 

非公開メンバ関数

void buildEncryptersAndDecrypters () throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
 

非公開変数類

Map< String, JWEEncrypter > encrypters = new HashMap<>()
 
Map< String, JWEDecrypter > decrypters = new HashMap<>()
 
String defaultEncryptionKeyId
 
String defaultDecryptionKeyId
 
JWEAlgorithm defaultAlgorithm
 
Map< String, JWK > keys = new HashMap<>()
 

静的非公開変数類

static final Logger logger = LoggerFactory.getLogger(DefaultJWTEncryptionAndDecryptionService.class)
 

詳解

著者
wkim

構築子と解体子

◆ DefaultJWTEncryptionAndDecryptionService() [1/2]

org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.DefaultJWTEncryptionAndDecryptionService ( Map< String, JWK >  keys) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
inline

Build this service based on the keys given. All public keys will be used to make encrypters, all private keys will be used to make decrypters.

引数
keys
例外
NoSuchAlgorithmException
InvalidKeySpecException
JOSEException
89  {
90  this.keys = keys;
92  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
void buildEncryptersAndDecrypters()
Definition: DefaultJWTEncryptionAndDecryptionService.java:221

◆ DefaultJWTEncryptionAndDecryptionService() [2/2]

org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.DefaultJWTEncryptionAndDecryptionService ( JWKSetKeyStore  keyStore) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
inline

Build this service based on the given keystore. All keys must have a key id (

kid

) field in order to be used.

引数
keyStore
例外
NoSuchAlgorithmException
InvalidKeySpecException
JOSEException
103  {
104 
105  // convert all keys in the keystore to a map based on key id
106  for (JWK key : keyStore.getKeys()) {
107  if (!Strings.isNullOrEmpty(key.getKeyID())) {
108  this.keys.put(key.getKeyID(), key);
109  } else {
110  throw new IllegalArgumentException("Tried to load a key from a keystore without a 'kid' field: " + key);
111  }
112  }
113 
115 
116  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
void buildEncryptersAndDecrypters()
Definition: DefaultJWTEncryptionAndDecryptionService.java:221

関数詳解

◆ afterPropertiesSet()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.afterPropertiesSet ( )
inline
120  {
121 
122  if (keys == null) {
123  throw new IllegalArgumentException("Encryption and decryption service must have at least one key configured.");
124  }
125  try {
127  } catch (NoSuchAlgorithmException e) {
128  throw new IllegalArgumentException("Encryption and decryption service could not find given algorithm.");
129  } catch (InvalidKeySpecException e) {
130  throw new IllegalArgumentException("Encryption and decryption service saw an invalid key specification.");
131  } catch (JOSEException e) {
132  throw new IllegalArgumentException("Encryption and decryption service was unable to process JOSE object.");
133  }
134  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
void buildEncryptersAndDecrypters()
Definition: DefaultJWTEncryptionAndDecryptionService.java:221

◆ buildEncryptersAndDecrypters()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.buildEncryptersAndDecrypters ( ) throws NoSuchAlgorithmException, InvalidKeySpecException, JOSEException
inlineprivate

Builds all the encrypters and decrypters for this service based on the key map.

例外
221  {
222 
223  for (Map.Entry<String, JWK> jwkEntry : keys.entrySet()) {
224 
225  String id = jwkEntry.getKey();
226  JWK jwk = jwkEntry.getValue();
227 
228  if (jwk instanceof RSAKey) {
229  // build RSA encrypters and decrypters
230 
231  RSAEncrypter encrypter = new RSAEncrypter((RSAKey) jwk); // there should always at least be the public key
232  encrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
233  encrypters.put(id, encrypter);
234 
235  if (jwk.isPrivate()) { // we can decrypt!
236  RSADecrypter decrypter = new RSADecrypter((RSAKey) jwk);
237  decrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
238  decrypters.put(id, decrypter);
239  } else {
240  logger.warn("No private key for key #" + jwk.getKeyID());
241  }
242  } else if (jwk instanceof ECKey) {
243 
244  // build EC Encrypters and decrypters
245 
246  ECDHEncrypter encrypter = new ECDHEncrypter((ECKey) jwk);
247  encrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
248  encrypters.put(id, encrypter);
249 
250  if (jwk.isPrivate()) { // we can decrypt too
251  ECDHDecrypter decrypter = new ECDHDecrypter((ECKey) jwk);
252  decrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
253  decrypters.put(id, decrypter);
254  } else {
255  logger.warn("No private key for key # " + jwk.getKeyID());
256  }
257 
258  } else if (jwk instanceof OctetSequenceKey) {
259  // build symmetric encrypters and decrypters
260 
261  DirectEncrypter encrypter = new DirectEncrypter((OctetSequenceKey) jwk);
262  encrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
263  DirectDecrypter decrypter = new DirectDecrypter((OctetSequenceKey) jwk);
264  decrypter.getJCAContext().setProvider(BouncyCastleProviderSingleton.getInstance());
265 
266  encrypters.put(id, encrypter);
267  decrypters.put(id, decrypter);
268 
269  } else {
270  logger.warn("Unknown key type: " + jwk);
271  }
272 
273  }
274  }
Map< String, JWEDecrypter > decrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:69
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
static final Logger logger
Definition: DefaultJWTEncryptionAndDecryptionService.java:63
Map< String, JWEEncrypter > encrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:66

◆ decryptJwt()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.decryptJwt ( JWEObject  jwt)
inline

org.mitre.jwt.encryption.service.JWTEncryptionAndDecryptionServiceを実装しています。

198  {
199  if (getDefaultDecryptionKeyId() == null) {
200  throw new IllegalStateException("Tried to call default decryption with no default decrypter ID set");
201  }
202 
203  JWEDecrypter decrypter = decrypters.get(getDefaultDecryptionKeyId());
204 
205  try {
206  jwt.decrypt(decrypter);
207  } catch (JOSEException e) {
208 
209  logger.error("Failed to decrypt JWT, error was: ", e);
210  }
211 
212  }
Map< String, JWEDecrypter > decrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:69
static final Logger logger
Definition: DefaultJWTEncryptionAndDecryptionService.java:63
String getDefaultDecryptionKeyId()
Definition: DefaultJWTEncryptionAndDecryptionService.java:151

◆ encryptJwt()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.encryptJwt ( JWEObject  jwt)
inline

org.mitre.jwt.encryption.service.JWTEncryptionAndDecryptionServiceを実装しています。

178  {
179  if (getDefaultEncryptionKeyId() == null) {
180  throw new IllegalStateException("Tried to call default encryption with no default encrypter ID set");
181  }
182 
183  JWEEncrypter encrypter = encrypters.get(getDefaultEncryptionKeyId());
184 
185  try {
186  jwt.encrypt(encrypter);
187  } catch (JOSEException e) {
188 
189  logger.error("Failed to encrypt JWT, error was: ", e);
190  }
191 
192  }
static final Logger logger
Definition: DefaultJWTEncryptionAndDecryptionService.java:63
Map< String, JWEEncrypter > encrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:66
String getDefaultEncryptionKeyId()
Definition: DefaultJWTEncryptionAndDecryptionService.java:136

◆ getAllEncryptionAlgsSupported()

Collection<JWEAlgorithm> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getAllEncryptionAlgsSupported ( )
inline

org.mitre.jwt.encryption.service.JWTEncryptionAndDecryptionServiceを実装しています。

293  {
294  Set<JWEAlgorithm> algs = new HashSet<>();
295 
296  for (JWEEncrypter encrypter : encrypters.values()) {
297  algs.addAll(encrypter.supportedJWEAlgorithms());
298  }
299 
300  for (JWEDecrypter decrypter : decrypters.values()) {
301  algs.addAll(decrypter.supportedJWEAlgorithms());
302  }
303 
304  return algs;
305  }
Map< String, JWEDecrypter > decrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:69
Map< String, JWEEncrypter > encrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:66

◆ getAllEncryptionEncsSupported()

Collection<EncryptionMethod> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getAllEncryptionEncsSupported ( )
inline

org.mitre.jwt.encryption.service.JWTEncryptionAndDecryptionServiceを実装しています。

311  {
312  Set<EncryptionMethod> encs = new HashSet<>();
313 
314  for (JWEEncrypter encrypter : encrypters.values()) {
315  encs.addAll(encrypter.supportedEncryptionMethods());
316  }
317 
318  for (JWEDecrypter decrypter : decrypters.values()) {
319  encs.addAll(decrypter.supportedEncryptionMethods());
320  }
321 
322  return encs;
323  }
Map< String, JWEDecrypter > decrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:69
Map< String, JWEEncrypter > encrypters
Definition: DefaultJWTEncryptionAndDecryptionService.java:66

◆ getAllPublicKeys()

Map<String, JWK> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getAllPublicKeys ( )
inline

org.mitre.jwt.encryption.service.JWTEncryptionAndDecryptionServiceを実装しています。

277  {
278  Map<String, JWK> pubKeys = new HashMap<>();
279 
280  // pull out all public keys
281  for (String keyId : keys.keySet()) {
282  JWK key = keys.get(keyId);
283  JWK pub = key.toPublicJWK();
284  if (pub != null) {
285  pubKeys.put(keyId, pub);
286  }
287  }
288 
289  return pubKeys;
290  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78

◆ getDefaultAlgorithm()

JWEAlgorithm org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getDefaultAlgorithm ( )
inline
166  {
167  return defaultAlgorithm;
168  }
JWEAlgorithm defaultAlgorithm
Definition: DefaultJWTEncryptionAndDecryptionService.java:75

◆ getDefaultDecryptionKeyId()

String org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getDefaultDecryptionKeyId ( )
inline
151  {
152  if (defaultDecryptionKeyId != null) {
153  return defaultDecryptionKeyId;
154  } else if (keys.size() == 1) {
155  // if there's only one key in the map, it's the default
156  return keys.keySet().iterator().next();
157  } else {
158  return null;
159  }
160  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
String defaultDecryptionKeyId
Definition: DefaultJWTEncryptionAndDecryptionService.java:73

◆ getDefaultEncryptionKeyId()

String org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.getDefaultEncryptionKeyId ( )
inline
136  {
137  if (defaultEncryptionKeyId != null) {
138  return defaultEncryptionKeyId;
139  } else if (keys.size() == 1) {
140  // if there's only one key in the map, it's the default
141  return keys.keySet().iterator().next();
142  } else {
143  return null;
144  }
145  }
Map< String, JWK > keys
Definition: DefaultJWTEncryptionAndDecryptionService.java:78
String defaultEncryptionKeyId
Definition: DefaultJWTEncryptionAndDecryptionService.java:71

◆ setDefaultAlgorithm()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.setDefaultAlgorithm ( JWEAlgorithm  defaultAlgorithm)
inline
170  {
172  }
JWEAlgorithm defaultAlgorithm
Definition: DefaultJWTEncryptionAndDecryptionService.java:75

◆ setDefaultDecryptionKeyId()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.setDefaultDecryptionKeyId ( String  defaultDecryptionKeyId)
inline
162  {
164  }
String defaultDecryptionKeyId
Definition: DefaultJWTEncryptionAndDecryptionService.java:73

◆ setDefaultEncryptionKeyId()

void org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.setDefaultEncryptionKeyId ( String  defaultEncryptionKeyId)
inline
147  {
149  }
String defaultEncryptionKeyId
Definition: DefaultJWTEncryptionAndDecryptionService.java:71

メンバ詳解

◆ decrypters

Map<String, JWEDecrypter> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.decrypters = new HashMap<>()
private

◆ defaultAlgorithm

JWEAlgorithm org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.defaultAlgorithm
private

◆ defaultDecryptionKeyId

String org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.defaultDecryptionKeyId
private

◆ defaultEncryptionKeyId

String org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.defaultEncryptionKeyId
private

◆ encrypters

Map<String, JWEEncrypter> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.encrypters = new HashMap<>()
private

◆ keys

Map<String, JWK> org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.keys = new HashMap<>()
private

◆ logger

final Logger org.mitre.jwt.encryption.service.impl.DefaultJWTEncryptionAndDecryptionService.logger = LoggerFactory.getLogger(DefaultJWTEncryptionAndDecryptionService.class)
staticprivate

Logger for this class


このクラス詳解は次のファイルから抽出されました: