mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-08-08 06:03:47 +08:00
paillier pen support
and some bug fixes
This commit is contained in:
@@ -70,15 +70,15 @@ static int paillier_cb(int operation, ASN1_VALUE **pval,
|
||||
return 1;
|
||||
}
|
||||
|
||||
ASN1_SEQUENCE_cb(PAILLIER_PRIVATE_KEY, paillier_cb) = {
|
||||
ASN1_SEQUENCE_cb(PaillierPrivateKey, paillier_cb) = {
|
||||
ASN1_SIMPLE(PAILLIER, n, BIGNUM),
|
||||
ASN1_SIMPLE(PAILLIER, lambda, BIGNUM),
|
||||
ASN1_SIMPLE(PAILLIER, x, BIGNUM)
|
||||
} ASN1_SEQUENCE_END_cb(PAILLIER, PAILLIER_PRIVATE_KEY)
|
||||
} ASN1_SEQUENCE_END_cb(PAILLIER, PaillierPrivateKey)
|
||||
|
||||
ASN1_SEQUENCE_cb(PAILLIER_PUBLIC_KEY, paillier_cb) = {
|
||||
ASN1_SEQUENCE_cb(PaillierPublicKey, paillier_cb) = {
|
||||
ASN1_SIMPLE(PAILLIER, n, BIGNUM)
|
||||
} ASN1_SEQUENCE_END_cb(PAILLIER, PAILLIER_PUBLIC_KEY)
|
||||
} ASN1_SEQUENCE_END_cb(PAILLIER, PaillierPublicKey)
|
||||
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(PAILLIER, PAILLIER_PRIVATE_KEY, PAILLIER_PRIVATE_KEY)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(PAILLIER, PAILLIER_PUBLIC_KEY, PAILLIER_PUBLIC_KEY)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(PAILLIER, PaillierPrivateKey, PaillierPrivateKey)
|
||||
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(PAILLIER, PaillierPublicKey, PaillierPublicKey)
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
#ifndef HEADER_PAI_LCL_H
|
||||
#define HEADER_PAI_LCL_H
|
||||
|
||||
#include "e_os.h"
|
||||
|
||||
struct paillier_st {
|
||||
int bits;
|
||||
BIGNUM *n; /* public key */
|
||||
@@ -57,6 +59,11 @@ struct paillier_st {
|
||||
BIGNUM *n_squared; /* online */
|
||||
BIGNUM *n_plusone; /* online */
|
||||
BIGNUM *x; /* online */
|
||||
|
||||
int references;
|
||||
int flags;
|
||||
CRYPTO_EX_DATA ex_data;
|
||||
CRYPTO_RWLOCK *lock;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -145,6 +145,8 @@ int PAILLIER_generate_key(PAILLIER *key, int bits)
|
||||
|
||||
} while (0);
|
||||
|
||||
ret = 1;
|
||||
|
||||
end:
|
||||
BN_clear_free(p);
|
||||
BN_clear_free(q);
|
||||
@@ -345,3 +347,14 @@ end:
|
||||
return 0;
|
||||
}
|
||||
|
||||
int PAILLIER_up_ref(PAILLIER *r)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (CRYPTO_atomic_add(&r->references, 1, &i, r->lock) <= 0)
|
||||
return 0;
|
||||
|
||||
REF_PRINT_COUNT("PAILLIER", r);
|
||||
REF_ASSERT_ISNT(i < 2);
|
||||
return ((i > 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user