remove_leading_zeros() was incorrectly using memcpy() for overlapping memory segments. Replace it by a more-central p11_attribute_trim() function in the p11util.c file, and use memmove() instead.
Signed-off-by: Klaus Heinrich Kiwi <[email protected]> --- usr/lib/pkcs11/cca_stdll/h_extern.h | 2 - usr/lib/pkcs11/cca_stdll/key.c | 123 ++++++++++++++++++++++------------- usr/lib/pkcs11/cca_stdll/utility.c | 24 ------- usr/lib/pkcs11/common/h_extern.h | 2 - usr/lib/pkcs11/common/key.c | 121 ++++++++++++++++++++++------------ usr/lib/pkcs11/common/p11util.c | 23 +++++++ usr/lib/pkcs11/common/p11util.h | 8 ++ usr/lib/pkcs11/common/utility.c | 24 ------- usr/lib/pkcs11/tpm_stdll/h_extern.h | 2 - usr/lib/pkcs11/tpm_stdll/utility.c | 24 ------- 10 files changed, 186 insertions(+), 167 deletions(-) diff --git a/usr/lib/pkcs11/cca_stdll/h_extern.h b/usr/lib/pkcs11/cca_stdll/h_extern.h index e30f661..93a8767 100644 --- a/usr/lib/pkcs11/cca_stdll/h_extern.h +++ b/usr/lib/pkcs11/cca_stdll/h_extern.h @@ -565,8 +565,6 @@ CK_RV strip_pkcs_padding( CK_BYTE * ptr, CK_ULONG total_len, CK_ULONG * data_len ); -CK_RV remove_leading_zeros( CK_ATTRIBUTE *attr ); - // RNG routines // diff --git a/usr/lib/pkcs11/cca_stdll/key.c b/usr/lib/pkcs11/cca_stdll/key.c index 7ce7bc8..08d0286 100644 --- a/usr/lib/pkcs11/cca_stdll/key.c +++ b/usr/lib/pkcs11/cca_stdll/key.c @@ -405,6 +405,7 @@ #include <string.h> // for memcmp() et al #include "pkcs11types.h" +#include "p11util.h" #include "defs.h" #include "cca_stdll.h" #include "host_defs.h" @@ -1444,15 +1445,19 @@ rsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) return CKR_ATTRIBUTE_READ_ONLY; } case CKA_MODULUS: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_PUBLIC_EXPONENT: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1629,8 +1634,10 @@ rsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) switch (attr->type) { case CKA_MODULUS: case CKA_PRIVATE_EXPONENT: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1641,8 +1648,10 @@ rsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_EXPONENT_1: case CKA_EXPONENT_2: case CKA_COEFFICIENT: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1812,17 +1821,17 @@ rsa_priv_unwrap( TEMPLATE *tmpl, st_err_log(88, __FILE__, __LINE__); return rc; } - remove_leading_zeros( modulus ); - remove_leading_zeros( publ_exp ); + p11_attribute_trim( modulus ); + p11_attribute_trim( publ_exp ); #if 0 - remove_leading_zeros( priv_exp ); - remove_leading_zeros( prime1 ); - remove_leading_zeros( prime2 ); - remove_leading_zeros( exponent1 ); - remove_leading_zeros( exponent2 ); - remove_leading_zeros( coeff ); + p11_attribute_trim( priv_exp ); + p11_attribute_trim( prime1 ); + p11_attribute_trim( prime2 ); + p11_attribute_trim( exponent1 ); + p11_attribute_trim( exponent2 ); + p11_attribute_trim( coeff ); #else - remove_leading_zeros( opaque ); + p11_attribute_trim( opaque ); #endif template_update_attribute( tmpl, modulus ); @@ -1971,7 +1980,8 @@ dsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_SUBPRIME: @@ -1986,19 +1996,24 @@ dsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2139,7 +2154,8 @@ dsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_SUBPRIME: @@ -2154,13 +2170,16 @@ dsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2272,10 +2291,10 @@ dsa_priv_unwrap( TEMPLATE *tmpl, st_err_log(88, __FILE__, __LINE__); return rc; } - remove_leading_zeros( prime ); - remove_leading_zeros( subprime ); - remove_leading_zeros( base ); - remove_leading_zeros( value ); + p11_attribute_trim( prime ); + p11_attribute_trim( subprime ); + p11_attribute_trim( base ); + p11_attribute_trim( value ); template_update_attribute( tmpl, prime ); template_update_attribute( tmpl, subprime ); @@ -2480,8 +2499,10 @@ ecdsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2609,15 +2630,19 @@ dh_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) switch (attr->type) { case CKA_PRIME: case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2745,8 +2770,10 @@ dh_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_PRIME: case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2905,15 +2932,19 @@ kea_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_PRIME: case CKA_SUBPRIME: case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -3042,8 +3073,10 @@ kea_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_SUBPRIME: case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; diff --git a/usr/lib/pkcs11/cca_stdll/utility.c b/usr/lib/pkcs11/cca_stdll/utility.c index 15f5a3b..bdac177 100644 --- a/usr/lib/pkcs11/cca_stdll/utility.c +++ b/usr/lib/pkcs11/cca_stdll/utility.c @@ -838,30 +838,6 @@ strip_pkcs_padding( CK_BYTE * ptr, // // -CK_RV -remove_leading_zeros( CK_ATTRIBUTE *attr ) -{ - CK_BYTE *ptr = NULL; - CK_ULONG new_len, i; - - ptr = attr->pValue; - - for (i = 0; i < attr->ulValueLen; i++) { - if (ptr[i] != 0x0) - break; - } - - new_len = attr->ulValueLen - i; - - memcpy( ptr, ptr + i, new_len ); - attr->ulValueLen = new_len; - - return CKR_OK; -} - - -// -// CK_BYTE parity_adjust( CK_BYTE b ) { diff --git a/usr/lib/pkcs11/common/h_extern.h b/usr/lib/pkcs11/common/h_extern.h index be2a275..851d0b1 100755 --- a/usr/lib/pkcs11/common/h_extern.h +++ b/usr/lib/pkcs11/common/h_extern.h @@ -849,8 +849,6 @@ CK_RV strip_pkcs_padding( CK_BYTE * ptr, CK_ULONG total_len, CK_ULONG * data_len ); -CK_RV remove_leading_zeros( CK_ATTRIBUTE *attr ); - // RNG routines // diff --git a/usr/lib/pkcs11/common/key.c b/usr/lib/pkcs11/common/key.c index 6da170c..743f897 100755 --- a/usr/lib/pkcs11/common/key.c +++ b/usr/lib/pkcs11/common/key.c @@ -405,6 +405,7 @@ #include <string.h> // for memcmp() et al #include "pkcs11types.h" +#include "p11util.h" #include "defs.h" #include "host_defs.h" #include "h_extern.h" @@ -1441,15 +1442,19 @@ rsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) return CKR_ATTRIBUTE_READ_ONLY; } case CKA_MODULUS: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_PUBLIC_EXPONENT: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1626,8 +1631,10 @@ rsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) switch (attr->type) { case CKA_MODULUS: case CKA_PRIVATE_EXPONENT: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1638,8 +1645,10 @@ rsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_EXPONENT_1: case CKA_EXPONENT_2: case CKA_COEFFICIENT: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -1790,14 +1799,14 @@ rsa_priv_unwrap( TEMPLATE *tmpl, st_err_log(88, __FILE__, __LINE__); return rc; } - remove_leading_zeros( modulus ); - remove_leading_zeros( publ_exp ); - remove_leading_zeros( priv_exp ); - remove_leading_zeros( prime1 ); - remove_leading_zeros( prime2 ); - remove_leading_zeros( exponent1 ); - remove_leading_zeros( exponent2 ); - remove_leading_zeros( coeff ); + p11_attribute_trim( modulus ); + p11_attribute_trim( publ_exp ); + p11_attribute_trim( priv_exp ); + p11_attribute_trim( prime1 ); + p11_attribute_trim( prime2 ); + p11_attribute_trim( exponent1 ); + p11_attribute_trim( exponent2 ); + p11_attribute_trim( coeff ); template_update_attribute( tmpl, modulus ); template_update_attribute( tmpl, publ_exp ); @@ -1941,7 +1950,8 @@ dsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_SUBPRIME: @@ -1956,19 +1966,24 @@ dsa_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2109,7 +2124,8 @@ dsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_SUBPRIME: @@ -2124,13 +2140,16 @@ dsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) st_err_log(9, __FILE__, __LINE__); return CKR_ATTRIBUTE_VALUE_INVALID; } - return remove_leading_zeros( attr ); + p11_attribute_trim( attr ); + return CKR_OK; } case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2242,10 +2261,10 @@ dsa_priv_unwrap( TEMPLATE *tmpl, st_err_log(88, __FILE__, __LINE__); return rc; } - remove_leading_zeros( prime ); - remove_leading_zeros( subprime ); - remove_leading_zeros( base ); - remove_leading_zeros( value ); + p11_attribute_trim( prime ); + p11_attribute_trim( subprime ); + p11_attribute_trim( base ); + p11_attribute_trim( value ); template_update_attribute( tmpl, prime ); template_update_attribute( tmpl, subprime ); @@ -2450,8 +2469,10 @@ ecdsa_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2579,15 +2600,19 @@ dh_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) switch (attr->type) { case CKA_PRIME: case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2715,8 +2740,10 @@ dh_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_PRIME: case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -2875,15 +2902,19 @@ kea_publ_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_PRIME: case CKA_SUBPRIME: case CKA_BASE: - if (mode == MODE_CREATE || mode == MODE_KEYGEN) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE || mode == MODE_KEYGEN) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; } case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; @@ -3012,8 +3043,10 @@ kea_priv_validate_attribute( TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode ) case CKA_SUBPRIME: case CKA_BASE: case CKA_VALUE: - if (mode == MODE_CREATE) - return remove_leading_zeros( attr ); + if (mode == MODE_CREATE) { + p11_attribute_trim( attr ); + return CKR_OK; + } else{ st_err_log(7, __FILE__, __LINE__); return CKR_ATTRIBUTE_READ_ONLY; diff --git a/usr/lib/pkcs11/common/p11util.c b/usr/lib/pkcs11/common/p11util.c index c5f1765..8231145 100755 --- a/usr/lib/pkcs11/common/p11util.c +++ b/usr/lib/pkcs11/common/p11util.c @@ -701,3 +701,26 @@ p11_bigint_trim(CK_BYTE_PTR in, CK_ULONG_PTR size) { *size -= i; return in + i; } + +/* p11_attribute_trim() - trim a PKCS#11 CK_ATTRIBUTE in place, + * using memmove() to move the data and adjusting + * ulValueLen. The resulting "pValue" pointer stays the + * same so that the caller can free() it normally + * @attr is the pointer to the CK_ATTRIBUTE to be trimmed + */ +void +p11_attribute_trim(CK_ATTRIBUTE *attr) { + + CK_BYTE_PTR ptr; + CK_ULONG size; + + if (attr != NULL) { + size = attr->ulValueLen; + ptr = p11_bigint_trim(attr->pValue, &size); + + if (ptr != attr->pValue) { + attr->ulValueLen = size; + memmove(attr->pValue, ptr, size); + } + } +} diff --git a/usr/lib/pkcs11/common/p11util.h b/usr/lib/pkcs11/common/p11util.h index 2e31bff..88b2d64 100755 --- a/usr/lib/pkcs11/common/p11util.h +++ b/usr/lib/pkcs11/common/p11util.h @@ -326,5 +326,13 @@ char * p11_ahex_dump(char **dst, CK_BYTE_PTR ptr, CK_ULONG len); */ CK_BYTE_PTR p11_bigint_trim(CK_BYTE_PTR in, CK_ULONG_PTR size); +/* p11_attribute_trim() - trim a PKCS#11 CK_ATTRIBUTE in place, + * using memmove() to move the data and adjusting + * ulValueLen. The resulting "pValue" pointer stays the + * same so that the caller can free() it normally + * @attr is the pointer to the CK_ATTRIBUTE to be trimmed + */ +void p11_attribute_trim(CK_ATTRIBUTE *attr); + #endif // #ifndef _P11UTIL_H_ diff --git a/usr/lib/pkcs11/common/utility.c b/usr/lib/pkcs11/common/utility.c index 5e401e9..bbea667 100755 --- a/usr/lib/pkcs11/common/utility.c +++ b/usr/lib/pkcs11/common/utility.c @@ -1117,30 +1117,6 @@ strip_pkcs_padding( CK_BYTE * ptr, // // -CK_RV -remove_leading_zeros( CK_ATTRIBUTE *attr ) -{ - CK_BYTE *ptr = NULL; - CK_ULONG new_len, i; - - ptr = attr->pValue; - - for (i = 0; i < attr->ulValueLen; i++) { - if (ptr[i] != 0x0) - break; - } - - new_len = attr->ulValueLen - i; - - memcpy( ptr, ptr + i, new_len ); - attr->ulValueLen = new_len; - - return CKR_OK; -} - - -// -// CK_BYTE parity_adjust( CK_BYTE b ) { diff --git a/usr/lib/pkcs11/tpm_stdll/h_extern.h b/usr/lib/pkcs11/tpm_stdll/h_extern.h index d708373..00a260a 100644 --- a/usr/lib/pkcs11/tpm_stdll/h_extern.h +++ b/usr/lib/pkcs11/tpm_stdll/h_extern.h @@ -546,8 +546,6 @@ CK_RV strip_pkcs_padding( CK_BYTE * ptr, CK_ULONG total_len, CK_ULONG * data_len ); -CK_RV remove_leading_zeros( CK_ATTRIBUTE *attr ); - // RNG routines // diff --git a/usr/lib/pkcs11/tpm_stdll/utility.c b/usr/lib/pkcs11/tpm_stdll/utility.c index ad32fb5..e17752b 100644 --- a/usr/lib/pkcs11/tpm_stdll/utility.c +++ b/usr/lib/pkcs11/tpm_stdll/utility.c @@ -856,30 +856,6 @@ strip_pkcs_padding( CK_BYTE * ptr, // // -CK_RV -remove_leading_zeros( CK_ATTRIBUTE *attr ) -{ - CK_BYTE *ptr = NULL; - CK_ULONG new_len, i; - - ptr = attr->pValue; - - for (i = 0; i < attr->ulValueLen; i++) { - if (ptr[i] != 0x0) - break; - } - - new_len = attr->ulValueLen - i; - - memcpy( ptr, ptr + i, new_len ); - attr->ulValueLen = new_len; - - return CKR_OK; -} - - -// -// CK_BYTE parity_adjust( CK_BYTE b ) { -- 1.7.2.3 ------------------------------------------------------------------------------ Lotusphere 2011 Register now for Lotusphere 2011 and learn how to connect the dots, take your collaborative environment to the next level, and enter the era of Social Business. http://p.sf.net/sfu/lotusphere-d2d _______________________________________________ Opencryptoki-tech mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opencryptoki-tech
