keycloak
公開メンバ関数 | 限定公開メンバ関数 | 全メンバ一覧
org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider クラス
org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider の継承関係図
Inheritance graph
org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider 連携図
Collaboration graph

公開メンバ関数

int getExpectedCEKLength ()
 
void encodeJwe (JWE jwe) throws IOException, GeneralSecurityException
 
void verifyAndDecodeJwe (JWE jwe) throws IOException, GeneralSecurityException
 
void deserializeCEK (JWEKeyStorage keyStorage)
 
byte [] serializeCEK (JWEKeyStorage keyStorage)
 

限定公開メンバ関数

int getExpectedAesKeyLength ()
 
String getHmacShaAlgorithm ()
 
int getAuthenticationTagLength ()
 

詳解

関数詳解

◆ deserializeCEK()

void org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.deserializeCEK ( JWEKeyStorage  keyStorage)
inlineinherited

org.keycloak.jose.jwe.enc.JWEEncryptionProviderを実装しています。

161  {
162  byte[] cekBytes = keyStorage.getCekBytes();
163 
164  int cekLength = getExpectedCEKLength();
165  byte[] cekMacKey = Arrays.copyOf(cekBytes, cekLength / 2);
166  byte[] cekAesKey = Arrays.copyOfRange(cekBytes, cekLength / 2, cekLength);
167 
168  SecretKeySpec aesKey = new SecretKeySpec(cekAesKey, "AES");
169  SecretKeySpec hmacKey = new SecretKeySpec(cekMacKey, "HMACSHA2");
170 
171  keyStorage.setCEKKey(aesKey, JWEKeyStorage.KeyUse.ENCRYPTION);
172  keyStorage.setCEKKey(hmacKey, JWEKeyStorage.KeyUse.SIGNATURE);
173  }

◆ encodeJwe()

void org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.encodeJwe ( JWE  jwe) throws IOException, GeneralSecurityException
inlineinherited

org.keycloak.jose.jwe.enc.JWEEncryptionProviderを実装しています。

47  {
48 
49  byte[] contentBytes = jwe.getContent();
50 
51  byte[] initializationVector = JWEUtils.generateSecret(16);
52 
53  Key aesKey = jwe.getKeyStorage().getCEKKey(JWEKeyStorage.KeyUse.ENCRYPTION, false);
54  if (aesKey == null) {
55  throw new IllegalArgumentException("AES CEK key not present");
56  }
57 
58  Key hmacShaKey = jwe.getKeyStorage().getCEKKey(JWEKeyStorage.KeyUse.SIGNATURE, false);
59  if (hmacShaKey == null) {
60  throw new IllegalArgumentException("HMAC CEK key not present");
61  }
62 
63  int expectedAesKeyLength = getExpectedAesKeyLength();
64  if (expectedAesKeyLength != aesKey.getEncoded().length) {
65  throw new IllegalStateException("Length of aes key should be " + expectedAesKeyLength +", but was " + aesKey.getEncoded().length);
66  }
67 
68  byte[] cipherBytes = encryptBytes(contentBytes, initializationVector, aesKey);
69 
70  byte[] aad = jwe.getBase64Header().getBytes("UTF-8");
71  byte[] authenticationTag = computeAuthenticationTag(aad, initializationVector, cipherBytes, hmacShaKey);
72 
73  jwe.setEncryptedContentInfo(initializationVector, cipherBytes, authenticationTag);
74  }
byte [] computeAuthenticationTag(byte[] aadBytes, byte[] ivBytes, byte[] cipherBytes, Key hmacKeySpec)
Definition: AesCbcHmacShaEncryptionProvider.java:133
byte [] encryptBytes(byte[] contentBytes, byte[] ivBytes, Key aesKey)
Definition: AesCbcHmacShaEncryptionProvider.java:117

◆ getAuthenticationTagLength()

int org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider.getAuthenticationTagLength ( )
inlineprotected
237  {
238  return 24;
239  }

◆ getExpectedAesKeyLength()

int org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider.getExpectedAesKeyLength ( )
inlineprotected
227  {
228  return 24;
229  }

◆ getExpectedCEKLength()

int org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider.getExpectedCEKLength ( )
inline

org.keycloak.jose.jwe.enc.JWEEncryptionProviderを実装しています。

242  {
243  return 48;
244  }

◆ getHmacShaAlgorithm()

String org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.Aes192CbcHmacSha384Provider.getHmacShaAlgorithm ( )
inlineprotected
232  {
233  return "HMACSHA384";
234  }

◆ serializeCEK()

byte [] org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.serializeCEK ( JWEKeyStorage  keyStorage)
inlineinherited

org.keycloak.jose.jwe.enc.JWEEncryptionProviderを実装しています。

177  {
178  Key aesKey = keyStorage.getCEKKey(JWEKeyStorage.KeyUse.ENCRYPTION, false);
179  if (aesKey == null) {
180  throw new IllegalArgumentException("AES CEK key not present");
181  }
182 
183  Key hmacShaKey = keyStorage.getCEKKey(JWEKeyStorage.KeyUse.SIGNATURE, false);
184  if (hmacShaKey == null) {
185  throw new IllegalArgumentException("HMAC CEK key not present");
186  }
187 
188  byte[] hmacBytes = hmacShaKey.getEncoded();
189  byte[] aesBytes = aesKey.getEncoded();
190 
191  byte[] result = new byte[hmacBytes.length + aesBytes.length];
192  System.arraycopy(hmacBytes, 0, result, 0, hmacBytes.length);
193  System.arraycopy(aesBytes, 0, result, hmacBytes.length, aesBytes.length);
194 
195  return result;
196  }

◆ verifyAndDecodeJwe()

void org.keycloak.jose.jwe.enc.AesCbcHmacShaEncryptionProvider.verifyAndDecodeJwe ( JWE  jwe) throws IOException, GeneralSecurityException
inlineinherited

org.keycloak.jose.jwe.enc.JWEEncryptionProviderを実装しています。

78  {
79  Key aesKey = jwe.getKeyStorage().getCEKKey(JWEKeyStorage.KeyUse.ENCRYPTION, false);
80  if (aesKey == null) {
81  throw new IllegalArgumentException("AES CEK key not present");
82  }
83 
84  Key hmacShaKey = jwe.getKeyStorage().getCEKKey(JWEKeyStorage.KeyUse.SIGNATURE, false);
85  if (hmacShaKey == null) {
86  throw new IllegalArgumentException("HMAC CEK key not present");
87  }
88 
89  int expectedAesKeyLength = getExpectedAesKeyLength();
90  if (expectedAesKeyLength != aesKey.getEncoded().length) {
91  throw new IllegalStateException("Length of aes key should be " + expectedAesKeyLength +", but was " + aesKey.getEncoded().length);
92  }
93 
94  byte[] aad = jwe.getBase64Header().getBytes("UTF-8");
95  byte[] authenticationTag = computeAuthenticationTag(aad, jwe.getInitializationVector(), jwe.getEncryptedContent(), hmacShaKey);
96 
97  byte[] expectedAuthTag = jwe.getAuthenticationTag();
98  boolean digitsEqual = MessageDigest.isEqual(expectedAuthTag, authenticationTag);
99 
100  if (!digitsEqual) {
101  throw new IllegalArgumentException("Signature validations failed");
102  }
103 
104  byte[] contentBytes = decryptBytes(jwe.getEncryptedContent(), jwe.getInitializationVector(), aesKey);
105 
106  jwe.content(contentBytes);
107  }
byte [] computeAuthenticationTag(byte[] aadBytes, byte[] ivBytes, byte[] cipherBytes, Key hmacKeySpec)
Definition: AesCbcHmacShaEncryptionProvider.java:133
byte [] decryptBytes(byte[] encryptedBytes, byte[] ivBytes, Key aesKey)
Definition: AesCbcHmacShaEncryptionProvider.java:125

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