keycloak
公開メンバ関数 | 静的公開メンバ関数 | 関数 | 静的関数 | 非公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.jose.jwe.JWE クラス
org.keycloak.jose.jwe.JWE 連携図
Collaboration graph

公開メンバ関数

JWE header (JWEHeader header)
 
String getBase64Header () throws IOException
 
JWEKeyStorage getKeyStorage ()
 
byte [] getInitializationVector ()
 
JWE content (byte[] content)
 
byte [] getContent ()
 
byte [] getEncryptedContent ()
 
byte [] getAuthenticationTag ()
 
void setEncryptedContentInfo (byte[] initializationVector, byte[] encryptedContent, byte[] authenticationTag)
 
String encodeJwe () throws JWEException
 
JWE verifyAndDecodeJwe (String jweStr) throws JWEException
 

静的公開メンバ関数

static String encryptUTF8 (String password, String saltString, String payload)
 
static String encrypt (String password, String saltString, byte[] payload)
 
static byte [] decrypt (String password, String saltString, String encodedJwe)
 
static String decryptUTF8 (String password, String saltString, String encodedJwe)
 

関数

JWEHeader getHeader ()
 

静的関数

 [static initializer]
 

非公開メンバ関数

String getEncodedJweString ()
 

非公開変数類

JWEHeader header
 
String base64Header
 
JWEKeyStorage keyStorage = new JWEKeyStorage()
 
String base64Cek
 
byte [] initializationVector
 
byte [] content
 
byte [] encryptedContent
 
byte [] authenticationTag
 

詳解

著者
Marek Posolda

関数詳解

◆ [static initializer]()

org.keycloak.jose.jwe.JWE.[static initializer] ( )
inlinestaticpackage

◆ content()

JWE org.keycloak.jose.jwe.JWE.content ( byte []  content)
inline
97  {
98  this.content = content;
99  return this;
100  }
byte [] content
Definition: JWE.java:55

◆ decrypt()

static byte [] org.keycloak.jose.jwe.JWE.decrypt ( String  password,
String  saltString,
String  encodedJwe 
)
inlinestatic
240  {
241  try {
242  byte[] salt = Base64.decode(saltString);
243  SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
244  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 100, 128);
245  SecretKey tmp = factory.generateSecret(spec);
246  SecretKey aesKey = new SecretKeySpec(tmp.getEncoded(), "AES");
247 
248  JWE jwe = new JWE();
249  jwe.getKeyStorage()
250  .setEncryptionKey(aesKey);
251 
252  jwe.verifyAndDecodeJwe(encodedJwe);
253  return jwe.getContent();
254  } catch (Exception e) {
255  throw new RuntimeException(e);
256  }
257  }

◆ decryptUTF8()

static String org.keycloak.jose.jwe.JWE.decryptUTF8 ( String  password,
String  saltString,
String  encodedJwe 
)
inlinestatic
259  {
260  byte[] payload = decrypt(password, saltString, encodedJwe);
261  try {
262  return new String(payload, "UTF-8");
263  } catch (UnsupportedEncodingException e) {
264  throw new RuntimeException(e);
265  }
266  }
static byte [] decrypt(String password, String saltString, String encodedJwe)
Definition: JWE.java:240

◆ encodeJwe()

String org.keycloak.jose.jwe.JWE.encodeJwe ( ) throws JWEException
inline
123  {
124  try {
125  if (header == null) {
126  throw new IllegalStateException("Header must be set");
127  }
128  if (content == null) {
129  throw new IllegalStateException("Content must be set");
130  }
131 
132  JWEAlgorithmProvider algorithmProvider = JWERegistry.getAlgProvider(header.getAlgorithm());
133  if (algorithmProvider == null) {
134  throw new IllegalArgumentException("No provider for alg '" + header.getAlgorithm() + "'");
135  }
136 
137  JWEEncryptionProvider encryptionProvider = JWERegistry.getEncProvider(header.getEncryptionAlgorithm());
138  if (encryptionProvider == null) {
139  throw new IllegalArgumentException("No provider for enc '" + header.getAlgorithm() + "'");
140  }
141 
142  keyStorage.setEncryptionProvider(encryptionProvider);
143  keyStorage.getCEKKey(JWEKeyStorage.KeyUse.ENCRYPTION, true); // Will generate CEK if it's not already present
144 
145  byte[] encodedCEK = algorithmProvider.encodeCek(encryptionProvider, keyStorage, keyStorage.getEncryptionKey());
146  base64Cek = Base64Url.encode(encodedCEK);
147 
148  encryptionProvider.encodeJwe(this);
149 
150  return getEncodedJweString();
151  } catch (Exception e) {
152  throw new JWEException(e);
153  }
154  }
JWEHeader header
Definition: JWE.java:47
String getEncodedJweString()
Definition: JWE.java:157
Key getCEKKey(KeyUse keyUse, boolean generateIfNotPresent)
Definition: JWEKeyStorage.java:67
String getEncryptionAlgorithm()
Definition: JWEHeader.java:66
void setEncryptionProvider(JWEEncryptionProvider encryptionProvider)
Definition: JWEKeyStorage.java:94
String base64Cek
Definition: JWE.java:51
String getAlgorithm()
Definition: JWEHeader.java:62
byte [] content
Definition: JWE.java:55
Key getEncryptionKey()
Definition: JWEKeyStorage.java:40
JWEKeyStorage keyStorage
Definition: JWE.java:50

◆ encrypt()

static String org.keycloak.jose.jwe.JWE.encrypt ( String  password,
String  saltString,
byte []  payload 
)
inlinestatic
218  {
219  try {
220  byte[] salt = Base64.decode(saltString);
221  SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
222  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 100, 128);
223  SecretKey tmp = factory.generateSecret(spec);
224  SecretKey aesKey = new SecretKeySpec(tmp.getEncoded(), "AES");
225 
226  JWEHeader jweHeader = new JWEHeader(JWEConstants.A128KW, JWEConstants.A128CBC_HS256, null);
227  JWE jwe = new JWE()
228  .header(jweHeader)
229  .content(payload);
230 
231  jwe.getKeyStorage()
232  .setEncryptionKey(aesKey);
233 
234  return jwe.encodeJwe();
235  } catch (Exception e) {
236  throw new RuntimeException(e);
237  }
238  }

◆ encryptUTF8()

static String org.keycloak.jose.jwe.JWE.encryptUTF8 ( String  password,
String  saltString,
String  payload 
)
inlinestatic
206  {
207  byte[] bytes = null;
208  try {
209  bytes = payload.getBytes("UTF-8");
210  } catch (UnsupportedEncodingException e) {
211  throw new RuntimeException(e);
212  }
213  return encrypt(password, saltString, bytes);
214 
215  }
static String encrypt(String password, String saltString, byte[] payload)
Definition: JWE.java:218

◆ getAuthenticationTag()

byte [] org.keycloak.jose.jwe.JWE.getAuthenticationTag ( )
inline
111  {
112  return authenticationTag;
113  }
byte [] authenticationTag
Definition: JWE.java:58

◆ getBase64Header()

String org.keycloak.jose.jwe.JWE.getBase64Header ( ) throws IOException
inline
78  {
79  if (base64Header == null && header != null) {
80  byte[] contentBytes = JsonSerialization.writeValueAsBytes(header);
81  base64Header = Base64Url.encode(contentBytes);
82  }
83  return base64Header;
84  }
JWEHeader header
Definition: JWE.java:47
String base64Header
Definition: JWE.java:48

◆ getContent()

byte [] org.keycloak.jose.jwe.JWE.getContent ( )
inline
102  {
103  return content;
104  }
byte [] content
Definition: JWE.java:55

◆ getEncodedJweString()

String org.keycloak.jose.jwe.JWE.getEncodedJweString ( )
inlineprivate
157  {
158  StringBuilder builder = new StringBuilder();
159  builder.append(base64Header).append(".")
160  .append(base64Cek).append(".")
161  .append(Base64Url.encode(initializationVector)).append(".")
162  .append(Base64Url.encode(encryptedContent)).append(".")
163  .append(Base64Url.encode(authenticationTag));
164 
165  return builder.toString();
166  }
byte [] initializationVector
Definition: JWE.java:53
byte [] authenticationTag
Definition: JWE.java:58
String base64Header
Definition: JWE.java:48
byte [] encryptedContent
Definition: JWE.java:56
String base64Cek
Definition: JWE.java:51

◆ getEncryptedContent()

byte [] org.keycloak.jose.jwe.JWE.getEncryptedContent ( )
inline
106  {
107  return encryptedContent;
108  }
byte [] encryptedContent
Definition: JWE.java:56

◆ getHeader()

JWEHeader org.keycloak.jose.jwe.JWE.getHeader ( )
inlinepackage
66  {
67  if (header == null && base64Header != null) {
68  try {
69  byte[] decodedHeader = Base64Url.decode(base64Header);
70  header = JsonSerialization.readValue(decodedHeader, JWEHeader.class);
71  } catch (IOException ioe) {
72  throw new RuntimeException(ioe);
73  }
74  }
75  return header;
76  }
JWEHeader header
Definition: JWE.java:47
String base64Header
Definition: JWE.java:48

◆ getInitializationVector()

byte [] org.keycloak.jose.jwe.JWE.getInitializationVector ( )
inline
92  {
93  return initializationVector;
94  }
byte [] initializationVector
Definition: JWE.java:53

◆ getKeyStorage()

JWEKeyStorage org.keycloak.jose.jwe.JWE.getKeyStorage ( )
inline
87  {
88  return keyStorage;
89  }
JWEKeyStorage keyStorage
Definition: JWE.java:50

◆ header()

JWE org.keycloak.jose.jwe.JWE.header ( JWEHeader  header)
inline
60  {
61  this.header = header;
62  this.base64Header = null;
63  return this;
64  }
JWEHeader header
Definition: JWE.java:47
String base64Header
Definition: JWE.java:48

◆ setEncryptedContentInfo()

void org.keycloak.jose.jwe.JWE.setEncryptedContentInfo ( byte []  initializationVector,
byte []  encryptedContent,
byte []  authenticationTag 
)
inline
116  {
120  }
byte [] initializationVector
Definition: JWE.java:53
byte [] authenticationTag
Definition: JWE.java:58
byte [] encryptedContent
Definition: JWE.java:56

◆ verifyAndDecodeJwe()

JWE org.keycloak.jose.jwe.JWE.verifyAndDecodeJwe ( String  jweStr) throws JWEException
inline
169  {
170  try {
171  String[] parts = jweStr.split("\\.");
172  if (parts.length != 5) {
173  throw new IllegalStateException("Not a JWE String");
174  }
175 
176  this.base64Header = parts[0];
177  this.base64Cek = parts[1];
178  this.initializationVector = Base64Url.decode(parts[2]);
179  this.encryptedContent = Base64Url.decode(parts[3]);
180  this.authenticationTag = Base64Url.decode(parts[4]);
181 
182  this.header = getHeader();
183  JWEAlgorithmProvider algorithmProvider = JWERegistry.getAlgProvider(header.getAlgorithm());
184  if (algorithmProvider == null) {
185  throw new IllegalArgumentException("No provider for alg '" + header.getAlgorithm() + "'");
186  }
187 
188  JWEEncryptionProvider encryptionProvider = JWERegistry.getEncProvider(header.getEncryptionAlgorithm());
189  if (encryptionProvider == null) {
190  throw new IllegalArgumentException("No provider for enc '" + header.getAlgorithm() + "'");
191  }
192 
193  keyStorage.setEncryptionProvider(encryptionProvider);
194 
195  byte[] decodedCek = algorithmProvider.decodeCek(Base64Url.decode(base64Cek), keyStorage.getEncryptionKey());
196  keyStorage.setCEKBytes(decodedCek);
197 
198  encryptionProvider.verifyAndDecodeJwe(this);
199 
200  return this;
201  } catch (Exception e) {
202  throw new JWEException(e);
203  }
204  }
JWEHeader header
Definition: JWE.java:47
byte [] initializationVector
Definition: JWE.java:53
byte [] authenticationTag
Definition: JWE.java:58
String base64Header
Definition: JWE.java:48
void setCEKBytes(byte[] cekBytes)
Definition: JWEKeyStorage.java:50
byte [] encryptedContent
Definition: JWE.java:56
JWEHeader getHeader()
Definition: JWE.java:66
String getEncryptionAlgorithm()
Definition: JWEHeader.java:66
void setEncryptionProvider(JWEEncryptionProvider encryptionProvider)
Definition: JWEKeyStorage.java:94
String base64Cek
Definition: JWE.java:51
String getAlgorithm()
Definition: JWEHeader.java:62
Key getEncryptionKey()
Definition: JWEKeyStorage.java:40
JWEKeyStorage keyStorage
Definition: JWE.java:50

メンバ詳解

◆ authenticationTag

byte [] org.keycloak.jose.jwe.JWE.authenticationTag
private

◆ base64Cek

String org.keycloak.jose.jwe.JWE.base64Cek
private

◆ base64Header

String org.keycloak.jose.jwe.JWE.base64Header
private

◆ content

byte [] org.keycloak.jose.jwe.JWE.content
private

◆ encryptedContent

byte [] org.keycloak.jose.jwe.JWE.encryptedContent
private

◆ header

JWEHeader org.keycloak.jose.jwe.JWE.header
private

◆ initializationVector

byte [] org.keycloak.jose.jwe.JWE.initializationVector
private

◆ keyStorage

JWEKeyStorage org.keycloak.jose.jwe.JWE.keyStorage = new JWEKeyStorage()
private

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