Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
e942c154
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
9
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看板
提交
e942c154
编写于
3月 05, 2013
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Initial CCM code.
Simple example of CCM code use: translated from the FIPS self tests.
上级
897dfd4e
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
115 addition
and
0 deletion
+115
-0
demos/evp/aesccm.c
demos/evp/aesccm.c
+115
-0
未找到文件。
demos/evp/aesccm.c
0 → 100644
浏览文件 @
e942c154
/* Simple AES CCM test program, uses the same NIST data used for the FIPS
* self test but uses the application level EVP APIs.
*/
#include <stdio.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
/* AES-CCM test data from NIST public test vectors */
static
const
unsigned
char
ccm_key
[]
=
{
0xce
,
0xb0
,
0x09
,
0xae
,
0xa4
,
0x45
,
0x44
,
0x51
,
0xfe
,
0xad
,
0xf0
,
0xe6
,
0xb3
,
0x6f
,
0x45
,
0x55
,
0x5d
,
0xd0
,
0x47
,
0x23
,
0xba
,
0xa4
,
0x48
,
0xe8
};
static
const
unsigned
char
ccm_nonce
[]
=
{
0x76
,
0x40
,
0x43
,
0xc4
,
0x94
,
0x60
,
0xb7
};
static
const
unsigned
char
ccm_adata
[]
=
{
0x6e
,
0x80
,
0xdd
,
0x7f
,
0x1b
,
0xad
,
0xf3
,
0xa1
,
0xc9
,
0xab
,
0x25
,
0xc7
,
0x5f
,
0x10
,
0xbd
,
0xe7
,
0x8c
,
0x23
,
0xfa
,
0x0e
,
0xb8
,
0xf9
,
0xaa
,
0xa5
,
0x3a
,
0xde
,
0xfb
,
0xf4
,
0xcb
,
0xf7
,
0x8f
,
0xe4
};
static
const
unsigned
char
ccm_pt
[]
=
{
0xc8
,
0xd2
,
0x75
,
0xf9
,
0x19
,
0xe1
,
0x7d
,
0x7f
,
0xe6
,
0x9c
,
0x2a
,
0x1f
,
0x58
,
0x93
,
0x9d
,
0xfe
,
0x4d
,
0x40
,
0x37
,
0x91
,
0xb5
,
0xdf
,
0x13
,
0x10
};
static
const
unsigned
char
ccm_ct
[]
=
{
0x8a
,
0x0f
,
0x3d
,
0x82
,
0x29
,
0xe4
,
0x8e
,
0x74
,
0x87
,
0xfd
,
0x95
,
0xa2
,
0x8a
,
0xd3
,
0x92
,
0xc8
,
0x0b
,
0x36
,
0x81
,
0xd4
,
0xfb
,
0xc7
,
0xbb
,
0xfd
};
static
const
unsigned
char
ccm_tag
[]
=
{
0x2d
,
0xd6
,
0xef
,
0x1c
,
0x45
,
0xd4
,
0xcc
,
0xb7
,
0x23
,
0xdc
,
0x07
,
0x44
,
0x14
,
0xdb
,
0x50
,
0x6d
};
void
aes_ccm_encrypt
(
void
)
{
EVP_CIPHER_CTX
*
ctx
;
int
outlen
,
tmplen
;
unsigned
char
outbuf
[
1024
];
printf
(
"AES CCM Encrypt:
\n
"
);
printf
(
"Plaintext:
\n
"
);
BIO_dump_fp
(
stdout
,
ccm_pt
,
sizeof
(
ccm_pt
));
ctx
=
EVP_CIPHER_CTX_new
();
/* Set cipher type and mode */
EVP_EncryptInit_ex
(
ctx
,
EVP_aes_192_ccm
(),
NULL
,
NULL
,
NULL
);
/* Set nonce length if default 96 bits is not appropriate */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_CCM_SET_IVLEN
,
sizeof
(
ccm_nonce
),
NULL
);
/* Set tag length */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_CCM_SET_TAG
,
sizeof
(
ccm_tag
),
NULL
);
/* Initialise key and IV */
EVP_EncryptInit_ex
(
ctx
,
NULL
,
NULL
,
ccm_key
,
ccm_nonce
);
/* Set plaintext length: only needed if AAD is used */
EVP_EncryptUpdate
(
ctx
,
NULL
,
&
outlen
,
NULL
,
sizeof
(
ccm_pt
));
/* Zero or one call to specify any AAD */
EVP_EncryptUpdate
(
ctx
,
NULL
,
&
outlen
,
ccm_adata
,
sizeof
(
ccm_adata
));
/* Encrypt plaintext: can only be called once */
EVP_EncryptUpdate
(
ctx
,
outbuf
,
&
outlen
,
ccm_pt
,
sizeof
(
ccm_pt
));
/* Output encrypted block */
printf
(
"Ciphertext:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
outlen
);
/* Finalise: note get no output for CCM */
EVP_EncryptFinal_ex
(
ctx
,
outbuf
,
&
outlen
);
/* Get tag */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_CCM_GET_TAG
,
16
,
outbuf
);
/* Output tag */
printf
(
"Tag:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
16
);
EVP_CIPHER_CTX_free
(
ctx
);
}
void
aes_ccm_decrypt
(
void
)
{
EVP_CIPHER_CTX
*
ctx
;
int
outlen
,
tmplen
,
rv
;
unsigned
char
outbuf
[
1024
];
printf
(
"AES CCM Derypt:
\n
"
);
printf
(
"Ciphertext:
\n
"
);
BIO_dump_fp
(
stdout
,
ccm_ct
,
sizeof
(
ccm_ct
));
ctx
=
EVP_CIPHER_CTX_new
();
/* Select cipher */
EVP_DecryptInit_ex
(
ctx
,
EVP_aes_192_ccm
(),
NULL
,
NULL
,
NULL
);
/* Set nonce length, omit for 96 bits */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_CCM_SET_IVLEN
,
sizeof
(
ccm_nonce
),
NULL
);
/* Set expected tag value */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_CCM_SET_TAG
,
sizeof
(
ccm_tag
),
(
void
*
)
ccm_tag
);
/* Specify key and IV */
EVP_DecryptInit_ex
(
ctx
,
NULL
,
NULL
,
ccm_key
,
ccm_nonce
);
/* Set ciphertext length: only needed if we have AAD */
EVP_EncryptUpdate
(
ctx
,
NULL
,
&
outlen
,
NULL
,
sizeof
(
ccm_ct
));
/* Zero or one call to specify any AAD */
EVP_DecryptUpdate
(
ctx
,
NULL
,
&
outlen
,
ccm_adata
,
sizeof
(
ccm_adata
));
/* Decrypt plaintext, verify tag: can only be called once */
rv
=
EVP_DecryptUpdate
(
ctx
,
outbuf
,
&
outlen
,
ccm_ct
,
sizeof
(
ccm_ct
));
/* Output decrypted block: if tag verify failed we get nothing */
if
(
rv
>
0
)
{
printf
(
"Plaintext:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
outlen
);
}
else
printf
(
"Plaintext not available: tag verify failed.
\n
"
);
EVP_CIPHER_CTX_free
(
ctx
);
}
int
main
(
int
argc
,
char
**
argv
)
{
aes_ccm_encrypt
();
aes_ccm_decrypt
();
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录