Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
32a2d8dd
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
32a2d8dd
编写于
4月 12, 2011
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Provisional AES XTS support.
上级
4bd1e895
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
146 addition
and
21 deletion
+146
-21
CHANGES
CHANGES
+5
-0
crypto/evp/e_aes.c
crypto/evp/e_aes.c
+99
-0
crypto/evp/evp.h
crypto/evp/evp.h
+5
-1
crypto/modes/Makefile
crypto/modes/Makefile
+2
-2
crypto/modes/modes.h
crypto/modes/modes.h
+6
-0
crypto/modes/modes_lcl.h
crypto/modes/modes_lcl.h
+6
-0
crypto/modes/xts128.c
crypto/modes/xts128.c
+2
-15
crypto/objects/obj_dat.h
crypto/objects/obj_dat.h
+9
-3
crypto/objects/obj_mac.h
crypto/objects/obj_mac.h
+8
-0
crypto/objects/obj_mac.num
crypto/objects/obj_mac.num
+2
-0
crypto/objects/objects.txt
crypto/objects/objects.txt
+2
-0
未找到文件。
CHANGES
浏览文件 @
32a2d8dd
...
...
@@ -4,6 +4,11 @@
Changes between 1.0.1 and 1.1.0 [xx XXX xxxx]
*) Provisional XTS support. Note: this does increase the maximum key
length from 32 to 64 bytes but there should be no binary compatibility
issues as existing applications will never use XTS mode.
[Steve Henson]
*) Extensive reorganisation of FIPS PRNG behaviour. Remove all dependencies
to OpenSSL RAND code and replace with a tiny FIPS RAND API which also
performs algorithm blocking for unapproved PRNG types. Also do not
...
...
crypto/evp/e_aes.c
浏览文件 @
32a2d8dd
...
...
@@ -458,5 +458,104 @@ static const EVP_CIPHER aes_256_gcm_cipher=
const
EVP_CIPHER
*
EVP_aes_256_gcm
(
void
)
{
return
&
aes_256_gcm_cipher
;
}
typedef
struct
{
/* AES key schedules to use */
AES_KEY
ks1
,
ks2
;
XTS128_CONTEXT
xts
;
}
EVP_AES_XTS_CTX
;
static
int
aes_xts_ctrl
(
EVP_CIPHER_CTX
*
c
,
int
type
,
int
arg
,
void
*
ptr
)
{
EVP_AES_XTS_CTX
*
xctx
=
c
->
cipher_data
;
if
(
type
!=
EVP_CTRL_INIT
)
return
-
1
;
/* key1 and key2 are used as an indicator both key and IV are set */
xctx
->
xts
.
key1
=
NULL
;
xctx
->
xts
.
key2
=
NULL
;
xctx
->
xts
.
block1
=
(
block128_f
)
AES_encrypt
;
xctx
->
xts
.
block2
=
(
block128_f
)
AES_encrypt
;
return
1
;
}
static
int
aes_xts_init_key
(
EVP_CIPHER_CTX
*
ctx
,
const
unsigned
char
*
key
,
const
unsigned
char
*
iv
,
int
enc
)
{
EVP_AES_XTS_CTX
*
xctx
=
ctx
->
cipher_data
;
if
(
!
iv
&&
!
key
)
return
1
;
if
(
key
)
{
AES_set_encrypt_key
(
key
,
ctx
->
key_len
*
8
,
&
xctx
->
ks1
);
AES_set_encrypt_key
(
key
+
ctx
->
key_len
,
ctx
->
key_len
*
8
,
&
xctx
->
ks2
);
xctx
->
xts
.
key1
=
&
xctx
->
ks1
;
xctx
->
xts
.
block1
=
(
block128_f
)
AES_encrypt
;
xctx
->
xts
.
block2
=
(
block128_f
)
AES_encrypt
;
}
if
(
iv
)
{
xctx
->
xts
.
key2
=
&
xctx
->
ks2
;
memcpy
(
ctx
->
iv
,
iv
,
16
);
}
return
1
;
}
static
int
aes_xts
(
EVP_CIPHER_CTX
*
ctx
,
unsigned
char
*
out
,
const
unsigned
char
*
in
,
size_t
len
)
{
EVP_AES_XTS_CTX
*
xctx
=
ctx
->
cipher_data
;
if
(
!
xctx
->
xts
.
key1
||
!
xctx
->
xts
.
key2
)
return
-
1
;
if
(
!
out
||
!
in
)
return
-
1
;
if
(
CRYPTO_xts128_encrypt
(
&
xctx
->
xts
,
ctx
->
iv
,
in
,
out
,
len
,
ctx
->
encrypt
))
return
-
1
;
return
len
;
}
static
const
EVP_CIPHER
aes_128_xts_cipher
=
{
NID_aes_128_xts
,
16
,
32
,
16
,
EVP_CIPH_XTS_MODE
|
EVP_CIPH_FLAG_FIPS
|
EVP_CIPH_FLAG_DEFAULT_ASN1
|
EVP_CIPH_CUSTOM_IV
|
EVP_CIPH_FLAG_CUSTOM_CIPHER
|
EVP_CIPH_ALWAYS_CALL_INIT
|
EVP_CIPH_CTRL_INIT
,
aes_xts_init_key
,
aes_xts
,
0
,
sizeof
(
EVP_AES_XTS_CTX
),
NULL
,
NULL
,
aes_xts_ctrl
,
NULL
};
const
EVP_CIPHER
*
EVP_aes_128_xts
(
void
)
{
return
&
aes_128_xts_cipher
;
}
static
const
EVP_CIPHER
aes_256_xts_cipher
=
{
NID_aes_256_xts
,
16
,
64
,
16
,
EVP_CIPH_XTS_MODE
|
EVP_CIPH_FLAG_FIPS
|
EVP_CIPH_FLAG_DEFAULT_ASN1
|
EVP_CIPH_CUSTOM_IV
|
EVP_CIPH_FLAG_CUSTOM_CIPHER
|
EVP_CIPH_ALWAYS_CALL_INIT
|
EVP_CIPH_CTRL_INIT
,
aes_xts_init_key
,
aes_xts
,
0
,
sizeof
(
EVP_AES_XTS_CTX
),
NULL
,
NULL
,
aes_xts_ctrl
,
NULL
};
const
EVP_CIPHER
*
EVP_aes_256_xts
(
void
)
{
return
&
aes_256_xts_cipher
;
}
#endif
crypto/evp/evp.h
浏览文件 @
32a2d8dd
...
...
@@ -83,7 +83,7 @@
#define EVP_RC5_32_12_16_KEY_SIZE 16
*/
#define EVP_MAX_MD_SIZE 64
/* longest known is SHA512 */
#define EVP_MAX_KEY_LENGTH
32
#define EVP_MAX_KEY_LENGTH
64
#define EVP_MAX_IV_LENGTH 16
#define EVP_MAX_BLOCK_LENGTH 32
...
...
@@ -330,6 +330,8 @@ struct evp_cipher_st
#define EVP_CIPH_OFB_MODE 0x4
#define EVP_CIPH_CTR_MODE 0x5
#define EVP_CIPH_GCM_MODE 0x6
#define EVP_CIPH_CCM_MODE 0x7
#define EVP_CIPH_XTS_MODE 0x10001
#define EVP_CIPH_MODE 0xF0007
/* Set if variable length cipher */
#define EVP_CIPH_VARIABLE_LENGTH 0x8
...
...
@@ -788,6 +790,7 @@ const EVP_CIPHER *EVP_aes_128_cfb128(void);
const
EVP_CIPHER
*
EVP_aes_128_ofb
(
void
);
const
EVP_CIPHER
*
EVP_aes_128_ctr
(
void
);
const
EVP_CIPHER
*
EVP_aes_128_gcm
(
void
);
const
EVP_CIPHER
*
EVP_aes_128_xts
(
void
);
const
EVP_CIPHER
*
EVP_aes_192_ecb
(
void
);
const
EVP_CIPHER
*
EVP_aes_192_cbc
(
void
);
const
EVP_CIPHER
*
EVP_aes_192_cfb1
(
void
);
...
...
@@ -806,6 +809,7 @@ const EVP_CIPHER *EVP_aes_256_cfb128(void);
const
EVP_CIPHER
*
EVP_aes_256_ofb
(
void
);
const
EVP_CIPHER
*
EVP_aes_256_ctr
(
void
);
const
EVP_CIPHER
*
EVP_aes_256_gcm
(
void
);
const
EVP_CIPHER
*
EVP_aes_256_xts
(
void
);
#endif
#ifndef OPENSSL_NO_CAMELLIA
const
EVP_CIPHER
*
EVP_camellia_128_ecb
(
void
);
...
...
crypto/modes/Makefile
浏览文件 @
32a2d8dd
...
...
@@ -21,9 +21,9 @@ TEST=
APPS
=
LIB
=
$(TOP)
/libcrypto.a
LIBSRC
=
cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c
LIBSRC
=
cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c
xts128.c
LIBOBJ
=
cbc128.o ctr128.o cts128.o cfb128.o ofb128.o gcm128.o
\
$(MODES_ASM_OBJ)
xts128.o
$(MODES_ASM_OBJ)
SRC
=
$(LIBSRC)
...
...
crypto/modes/modes.h
浏览文件 @
32a2d8dd
...
...
@@ -104,3 +104,9 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx,const unsigned char *tag,
size_t
len
);
void
CRYPTO_gcm128_tag
(
GCM128_CONTEXT
*
ctx
,
unsigned
char
*
tag
,
size_t
len
);
void
CRYPTO_gcm128_release
(
GCM128_CONTEXT
*
ctx
);
typedef
struct
xts128_context
XTS128_CONTEXT
;
int
CRYPTO_xts128_encrypt
(
const
XTS128_CONTEXT
*
ctx
,
const
unsigned
char
*
iv
,
const
unsigned
char
*
inp
,
unsigned
char
*
out
,
size_t
len
,
int
enc
);
crypto/modes/modes_lcl.h
浏览文件 @
32a2d8dd
...
...
@@ -116,3 +116,9 @@ struct gcm128_context {
block128_f
block
;
void
*
key
;
};
struct
xts128_context
{
void
*
key1
,
*
key2
;
block128_f
block1
,
block2
;
};
crypto/modes/xts128.c
浏览文件 @
32a2d8dd
...
...
@@ -58,12 +58,7 @@
#endif
#include <assert.h>
typedef
struct
{
void
*
key1
,
*
key2
;
block128_f
block1
,
block2
;
}
XTS128_CONTEXT
;
int
CRYPTO_xts128_encrypt
(
const
XTS128_CONTEXT
*
ctx
,
u64
secno
,
int
CRYPTO_xts128_encrypt
(
const
XTS128_CONTEXT
*
ctx
,
const
unsigned
char
*
iv
,
const
unsigned
char
*
inp
,
unsigned
char
*
out
,
size_t
len
,
int
enc
)
{
...
...
@@ -73,15 +68,7 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, u64 secno,
if
(
len
<
16
)
return
-
1
;
if
(
is_endian
.
little
)
{
tweak
.
u
[
0
]
=
secno
;
tweak
.
u
[
1
]
=
0
;
}
else
{
PUTU32
(
tweak
.
c
,
secno
);
PUTU32
(
tweak
.
c
+
4
,
secno
>>
32
);
tweak
.
u
[
1
]
=
0
;
}
memcpy
(
tweak
.
c
,
iv
,
16
);
(
*
ctx
->
block2
)(
tweak
.
c
,
tweak
.
c
,
ctx
->
key2
);
...
...
crypto/objects/obj_dat.h
浏览文件 @
32a2d8dd
...
...
@@ -62,9 +62,9 @@
* [including the GNU Public Licence.]
*/
#define NUM_NID 91
3
#define NUM_SN 90
6
#define NUM_LN 90
6
#define NUM_NID 91
5
#define NUM_SN 90
8
#define NUM_LN 90
8
#define NUM_OBJ 856
static
const
unsigned
char
lvalues
[
5971
]
=
{
...
...
@@ -2395,6 +2395,8 @@ static const ASN1_OBJECT nid_objs[NUM_NID]={
NID_anyExtendedKeyUsage
,
4
,
&
(
lvalues
[
5948
]),
0
},
{
"MGF1"
,
"mgf1"
,
NID_mgf1
,
9
,
&
(
lvalues
[
5952
]),
0
},
{
"RSASSA-PSS"
,
"rsassaPss"
,
NID_rsassaPss
,
9
,
&
(
lvalues
[
5961
]),
0
},
{
"AES-128-XTS"
,
"aes-128-xts"
,
NID_aes_128_xts
,
0
,
NULL
,
0
},
{
"AES-256-XTS"
,
"aes-256-xts"
,
NID_aes_256_xts
,
0
,
NULL
,
0
},
};
static
const
unsigned
int
sn_objs
[
NUM_SN
]
=
{
...
...
@@ -2406,6 +2408,7 @@ static const unsigned int sn_objs[NUM_SN]={
904
,
/* "AES-128-CTR" */
418
,
/* "AES-128-ECB" */
420
,
/* "AES-128-OFB" */
913
,
/* "AES-128-XTS" */
423
,
/* "AES-192-CBC" */
425
,
/* "AES-192-CFB" */
651
,
/* "AES-192-CFB1" */
...
...
@@ -2420,6 +2423,7 @@ static const unsigned int sn_objs[NUM_SN]={
906
,
/* "AES-256-CTR" */
426
,
/* "AES-256-ECB" */
428
,
/* "AES-256-OFB" */
914
,
/* "AES-256-XTS" */
91
,
/* "BF-CBC" */
93
,
/* "BF-CFB" */
92
,
/* "BF-ECB" */
...
...
@@ -3459,6 +3463,7 @@ static const unsigned int ln_objs[NUM_LN]={
418
,
/* "aes-128-ecb" */
895
,
/* "aes-128-gcm" */
420
,
/* "aes-128-ofb" */
913
,
/* "aes-128-xts" */
423
,
/* "aes-192-cbc" */
899
,
/* "aes-192-ccm" */
425
,
/* "aes-192-cfb" */
...
...
@@ -3477,6 +3482,7 @@ static const unsigned int ln_objs[NUM_LN]={
426
,
/* "aes-256-ecb" */
901
,
/* "aes-256-gcm" */
428
,
/* "aes-256-ofb" */
914
,
/* "aes-256-xts" */
376
,
/* "algorithm" */
484
,
/* "associatedDomain" */
485
,
/* "associatedName" */
...
...
crypto/objects/obj_mac.h
浏览文件 @
32a2d8dd
...
...
@@ -2735,6 +2735,14 @@
#define LN_aes_256_ctr "aes-256-ctr"
#define NID_aes_256_ctr 906
#define SN_aes_128_xts "AES-128-XTS"
#define LN_aes_128_xts "aes-128-xts"
#define NID_aes_128_xts 913
#define SN_aes_256_xts "AES-256-XTS"
#define LN_aes_256_xts "aes-256-xts"
#define NID_aes_256_xts 914
#define SN_des_cfb1 "DES-CFB1"
#define LN_des_cfb1 "des-cfb1"
#define NID_des_cfb1 656
...
...
crypto/objects/obj_mac.num
浏览文件 @
32a2d8dd
...
...
@@ -910,3 +910,5 @@ id_camellia256_wrap 909
anyExtendedKeyUsage 910
mgf1 911
rsassaPss 912
aes_128_xts 913
aes_256_xts 914
crypto/objects/objects.txt
浏览文件 @
32a2d8dd
...
...
@@ -892,6 +892,8 @@ aes 48 : id-aes256-wrap-pad
: AES-128-CTR : aes-128-ctr
: AES-192-CTR : aes-192-ctr
: AES-256-CTR : aes-256-ctr
: AES-128-XTS : aes-128-xts
: AES-256-XTS : aes-256-xts
: DES-CFB1 : des-cfb1
: DES-CFB8 : des-cfb8
: DES-EDE3-CFB1 : des-ede3-cfb1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录