Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
212a0808
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
接近 2 年 前同步成功
通知
12
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看板
提交
212a0808
编写于
3月 31, 2011
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Unused, untested, provisional RAND interface for DRBG.
上级
e06de4dd
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
195 addition
and
2 deletion
+195
-2
fips/rand/Makefile
fips/rand/Makefile
+4
-2
fips/rand/fips_drbg_rand.c
fips/rand/fips_drbg_rand.c
+179
-0
fips/rand/fips_rand.h
fips/rand/fips_rand.h
+4
-0
fips/rand/fips_rand_lcl.h
fips/rand/fips_rand_lcl.h
+8
-0
未找到文件。
fips/rand/Makefile
浏览文件 @
212a0808
...
@@ -23,9 +23,11 @@ APPS=
...
@@ -23,9 +23,11 @@ APPS=
LIB
=
$(TOP)
/libcrypto.a
LIB
=
$(TOP)
/libcrypto.a
LIBSRC
=
fips_rand.c fips_rand_selftest.c
\
LIBSRC
=
fips_rand.c fips_rand_selftest.c
\
fips_drbg_lib.c fips_drbg_hash.c fips_drbg_ctr.c fips_drbg_selftest.c
fips_drbg_lib.c fips_drbg_hash.c fips_drbg_ctr.c fips_drbg_selftest.c
\
fips_drbg_rand.c
LIBOBJ
=
fips_rand.o fips_rand_selftest.o
\
LIBOBJ
=
fips_rand.o fips_rand_selftest.o
\
fips_drbg_lib.o fips_drbg_hash.o fips_drbg_ctr.o fips_drbg_selftest.o
fips_drbg_lib.o fips_drbg_hash.o fips_drbg_ctr.o fips_drbg_selftest.o
\
fips_drbg_rand.o
SRC
=
$(LIBSRC)
SRC
=
$(LIBSRC)
...
...
fips/rand/fips_drbg_rand.c
0 → 100644
浏览文件 @
212a0808
/* fips/rand/fips_drbg_rand.c */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project.
*/
/* ====================================================================
* Copyright (c) 2011 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#define OPENSSL_FIPSAPI
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/evp.h>
#include <openssl/aes.h>
#include <openssl/err.h>
#include <openssl/rand.h>
#include <openssl/fips_rand.h>
#include "fips_rand_lcl.h"
/* Mapping of SP800-90 DRBGs to OpenSSL RAND_METHOD */
/* Since we only have one global PRNG used at any time in OpenSSL use a global
* variable to store contexts.
*/
static
DRBG_CTX
ossl_dctx
;
DRBG_CTX
*
FIPS_get_default_drbg
(
void
)
{
return
&
ossl_dctx
;
}
static
int
fips_drbg_bytes
(
unsigned
char
*
out
,
int
count
)
{
DRBG_CTX
*
dctx
=
&
ossl_dctx
;
int
rv
=
0
;
unsigned
char
*
adin
=
NULL
;
size_t
adinlen
=
0
;
CRYPTO_w_lock
(
CRYPTO_LOCK_RAND
);
do
{
size_t
rcnt
;
if
(
count
>
(
int
)
dctx
->
max_request
)
rcnt
=
dctx
->
max_request
;
else
rcnt
=
count
;
if
(
dctx
->
get_adin
)
{
adinlen
=
dctx
->
get_adin
(
dctx
,
&
adin
);
if
(
adinlen
&&
!
adin
)
{
/* ERROR */
goto
err
;
}
}
rv
=
FIPS_drbg_generate
(
dctx
,
out
,
rcnt
,
0
,
0
,
adin
,
adinlen
);
if
(
adin
)
{
if
(
dctx
->
cleanup_adin
)
dctx
->
cleanup_adin
(
dctx
,
adin
,
adinlen
);
adin
=
NULL
;
}
if
(
!
rv
)
goto
err
;
out
+=
rcnt
;
count
-=
rcnt
;
}
while
(
count
);
rv
=
1
;
err:
CRYPTO_w_unlock
(
CRYPTO_LOCK_RAND
);
return
rv
;
}
static
int
fips_drbg_status
(
void
)
{
DRBG_CTX
*
dctx
=
&
ossl_dctx
;
int
rv
;
CRYPTO_r_lock
(
CRYPTO_LOCK_RAND
);
rv
=
dctx
->
status
==
DRBG_STATUS_READY
?
1
:
0
;
CRYPTO_r_unlock
(
CRYPTO_LOCK_RAND
);
return
rv
;
}
static
void
fips_drbg_cleanup
(
void
)
{
DRBG_CTX
*
dctx
=
&
ossl_dctx
;
CRYPTO_w_lock
(
CRYPTO_LOCK_RAND
);
FIPS_drbg_uninstantiate
(
dctx
);
CRYPTO_w_unlock
(
CRYPTO_LOCK_RAND
);
}
static
int
fips_drbg_seed
(
const
void
*
seed
,
int
seedlen
)
{
DRBG_CTX
*
dctx
=
&
ossl_dctx
;
int
rv
=
1
;
if
(
dctx
->
rand_seed_cb
)
{
CRYPTO_w_lock
(
CRYPTO_LOCK_RAND
);
rv
=
dctx
->
rand_seed_cb
(
dctx
,
seed
,
seedlen
);
CRYPTO_w_unlock
(
CRYPTO_LOCK_RAND
);
}
return
rv
;
}
static
int
fips_drbg_add
(
const
void
*
seed
,
int
seedlen
,
double
add_entropy
)
{
DRBG_CTX
*
dctx
=
&
ossl_dctx
;
int
rv
=
1
;
if
(
dctx
->
rand_add_cb
)
{
CRYPTO_w_lock
(
CRYPTO_LOCK_RAND
);
rv
=
dctx
->
rand_add_cb
(
dctx
,
seed
,
seedlen
,
add_entropy
);
CRYPTO_w_unlock
(
CRYPTO_LOCK_RAND
);
}
return
rv
;
}
static
const
RAND_METHOD
rand_drbg_meth
=
{
fips_drbg_seed
,
fips_drbg_bytes
,
fips_drbg_cleanup
,
fips_drbg_add
,
fips_drbg_bytes
,
fips_drbg_status
};
const
RAND_METHOD
*
FIPS_drbg_method
(
void
)
{
return
&
rand_drbg_meth
;
}
fips/rand/fips_rand.h
浏览文件 @
212a0808
...
@@ -102,6 +102,10 @@ void FIPS_drbg_set_app_data(DRBG_CTX *ctx, void *app_data);
...
@@ -102,6 +102,10 @@ void FIPS_drbg_set_app_data(DRBG_CTX *ctx, void *app_data);
size_t
FIPS_drbg_get_blocklength
(
DRBG_CTX
*
dctx
);
size_t
FIPS_drbg_get_blocklength
(
DRBG_CTX
*
dctx
);
int
FIPS_drbg_get_strength
(
DRBG_CTX
*
dctx
);
int
FIPS_drbg_get_strength
(
DRBG_CTX
*
dctx
);
DRBG_CTX
*
FIPS_get_default_drbg
(
void
);
const
RAND_METHOD
*
FIPS_drbg_method
(
void
);
#ifdef __cplusplus
#ifdef __cplusplus
}
}
#endif
#endif
...
...
fips/rand/fips_rand_lcl.h
浏览文件 @
212a0808
...
@@ -167,6 +167,14 @@ struct drbg_ctx_st
...
@@ -167,6 +167,14 @@ struct drbg_ctx_st
/* set if lb is valid */
/* set if lb is valid */
int
lb_valid
;
int
lb_valid
;
/* Callbacks used when called through RAND interface */
/* Get any additional input for generate */
size_t
(
*
get_adin
)(
DRBG_CTX
*
ctx
,
unsigned
char
**
pout
);
void
(
*
cleanup_adin
)(
DRBG_CTX
*
ctx
,
unsigned
char
*
out
,
size_t
olen
);
/* Callback for RAND_seed(), RAND_add() */
int
(
*
rand_seed_cb
)(
DRBG_CTX
*
ctx
,
const
void
*
buf
,
int
num
);
int
(
*
rand_add_cb
)(
DRBG_CTX
*
ctx
,
const
void
*
buf
,
int
num
,
double
entropy
);
};
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录