Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
07a4ff79
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看板
提交
07a4ff79
编写于
10月 16, 2012
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add simple AES GCM code example
上级
964eaad7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
114 addition
and
0 deletion
+114
-0
demos/evp/aesgcm.c
demos/evp/aesgcm.c
+114
-0
未找到文件。
demos/evp/aesgcm.c
0 → 100644
浏览文件 @
07a4ff79
/* Simple AES GCM 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-GCM test data from NIST public test vectors */
static
const
unsigned
char
gcm_key
[]
=
{
0xee
,
0xbc
,
0x1f
,
0x57
,
0x48
,
0x7f
,
0x51
,
0x92
,
0x1c
,
0x04
,
0x65
,
0x66
,
0x5f
,
0x8a
,
0xe6
,
0xd1
,
0x65
,
0x8b
,
0xb2
,
0x6d
,
0xe6
,
0xf8
,
0xa0
,
0x69
,
0xa3
,
0x52
,
0x02
,
0x93
,
0xa5
,
0x72
,
0x07
,
0x8f
};
static
const
unsigned
char
gcm_iv
[]
=
{
0x99
,
0xaa
,
0x3e
,
0x68
,
0xed
,
0x81
,
0x73
,
0xa0
,
0xee
,
0xd0
,
0x66
,
0x84
};
static
const
unsigned
char
gcm_pt
[]
=
{
0xf5
,
0x6e
,
0x87
,
0x05
,
0x5b
,
0xc3
,
0x2d
,
0x0e
,
0xeb
,
0x31
,
0xb2
,
0xea
,
0xcc
,
0x2b
,
0xf2
,
0xa5
};
static
const
unsigned
char
gcm_aad
[]
=
{
0x4d
,
0x23
,
0xc3
,
0xce
,
0xc3
,
0x34
,
0xb4
,
0x9b
,
0xdb
,
0x37
,
0x0c
,
0x43
,
0x7f
,
0xec
,
0x78
,
0xde
};
static
const
unsigned
char
gcm_ct
[]
=
{
0xf7
,
0x26
,
0x44
,
0x13
,
0xa8
,
0x4c
,
0x0e
,
0x7c
,
0xd5
,
0x36
,
0x86
,
0x7e
,
0xb9
,
0xf2
,
0x17
,
0x36
};
static
const
unsigned
char
gcm_tag
[]
=
{
0x67
,
0xba
,
0x05
,
0x10
,
0x26
,
0x2a
,
0xe4
,
0x87
,
0xd7
,
0x37
,
0xee
,
0x62
,
0x98
,
0xf7
,
0x7e
,
0x0c
};
void
aes_gcm_encrypt
(
void
)
{
EVP_CIPHER_CTX
*
ctx
;
int
outlen
,
tmplen
;
unsigned
char
outbuf
[
1024
];
printf
(
"AES GCM Encrypt:
\n
"
);
printf
(
"Plaintext:
\n
"
);
BIO_dump_fp
(
stdout
,
gcm_pt
,
sizeof
(
gcm_pt
));
ctx
=
EVP_CIPHER_CTX_new
();
/* Set cipher type and mode */
EVP_EncryptInit_ex
(
ctx
,
EVP_aes_256_gcm
(),
NULL
,
NULL
,
NULL
);
/* Set IV length if default 96 bits is not appropriate */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_GCM_SET_IVLEN
,
sizeof
(
gcm_iv
),
NULL
);
/* Initialise key and IV */
EVP_EncryptInit_ex
(
ctx
,
NULL
,
NULL
,
gcm_key
,
gcm_iv
);
/* Zero or more calls to specify any AAD */
EVP_EncryptUpdate
(
ctx
,
NULL
,
&
outlen
,
gcm_aad
,
sizeof
(
gcm_aad
));
/* Encrypt plaintext */
EVP_EncryptUpdate
(
ctx
,
outbuf
,
&
outlen
,
gcm_pt
,
sizeof
(
gcm_pt
));
/* Output encrypted block */
printf
(
"Ciphertext:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
outlen
);
/* Finalise: note get no output for GCM */
EVP_EncryptFinal_ex
(
ctx
,
outbuf
,
&
outlen
);
/* Get tag */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_GCM_GET_TAG
,
16
,
outbuf
);
/* Output tag */
printf
(
"Tag:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
16
);
EVP_CIPHER_CTX_free
(
ctx
);
}
void
aes_gcm_decrypt
(
void
)
{
EVP_CIPHER_CTX
*
ctx
;
int
outlen
,
tmplen
,
rv
;
unsigned
char
outbuf
[
1024
];
printf
(
"AES GCM Derypt:
\n
"
);
printf
(
"Ciphertext:
\n
"
);
BIO_dump_fp
(
stdout
,
gcm_ct
,
sizeof
(
gcm_ct
));
ctx
=
EVP_CIPHER_CTX_new
();
/* Select cipher */
EVP_DecryptInit_ex
(
ctx
,
EVP_aes_256_gcm
(),
NULL
,
NULL
,
NULL
);
/* Set IV length, omit for 96 bits */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_GCM_SET_IVLEN
,
sizeof
(
gcm_iv
),
NULL
);
/* Specify key and IV */
EVP_DecryptInit_ex
(
ctx
,
NULL
,
NULL
,
gcm_key
,
gcm_iv
);
#if 0
/* Set expected tag value. A restriction in OpenSSL 1.0.1c and earlier
* required the tag before any AAD or ciphertext */
EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, sizeof(gcm_tag), gcm_tag);
#endif
/* Zero or more calls to specify any AAD */
EVP_DecryptUpdate
(
ctx
,
NULL
,
&
outlen
,
gcm_aad
,
sizeof
(
gcm_aad
));
/* Decrypt plaintext */
EVP_DecryptUpdate
(
ctx
,
outbuf
,
&
outlen
,
gcm_ct
,
sizeof
(
gcm_ct
));
/* Output decrypted block */
printf
(
"Plaintext:
\n
"
);
BIO_dump_fp
(
stdout
,
outbuf
,
outlen
);
/* Set expected tag value. Works in OpenSSL 1.0.1d and later */
EVP_CIPHER_CTX_ctrl
(
ctx
,
EVP_CTRL_GCM_SET_TAG
,
sizeof
(
gcm_tag
),
gcm_tag
);
/* Finalise: note get no output for GCM */
rv
=
EVP_DecryptFinal_ex
(
ctx
,
outbuf
,
&
outlen
);
/* Print out return value. If this is not successful authentication
* failed and plaintext is not trustworthy.
*/
printf
(
"Tag Verify %s
\n
"
,
rv
>
0
?
"Successful!"
:
"Failed!"
);
EVP_CIPHER_CTX_free
(
ctx
);
}
int
main
(
int
argc
,
char
**
argv
)
{
aes_gcm_encrypt
();
aes_gcm_decrypt
();
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录