hu_ECPVSSign()

Generates a signature on the given message using ECPVS.

Synopsis:

#include "huecpvs.h"
 
int hu_ECPVSSign(sb_Params eccParams, sb_PrivateKey privateKey, int hash, int kdf, int encoding, int mode, size_t ivLen, const unsigned char *iv, size_t padLen, size_t recoverableMessageLen, const unsigned char *recoverableMessage, size_t visibleMessageLen, const unsigned char *visibleMessage, size_t *sLen, unsigned char *sValue, size_t *rLen, unsigned char *rValue, sb_GlobalCtx sbCtx)

Arguments:

eccParams

An ECC parameters object.

privateKey

An ECC private key object.

hash

The hash algorithm to use. This is one of: HU_DIGEST_SHA1, HU_DIGEST_SHA224, HU_DIGEST_SHA256, HU_DIGEST_SHA384, or HU_DIGEST_SHA512.

kdf

The KDF algorithm to use. This is one of: HU_KDF_ANSI_SHA1, HU_KDF_ANSI_SHA224, HU_KDF_ANSI_SHA256, HU_KDF_ANSI_SHA384, or HU_KDF_ANSI_SHA512.

encoding

The symmetric encryption to use. Currently, the only valid value is HU_ECPVS_ENCRYPTION_STREAM.

mode

The encryption mode for block symmetric ciphers. Ignored for the stream cipher HU_ECPVS_ENCRYPTION_STREAM.

ivLen

The length (in bytes) of iv. Ignored for the stream cipher HU_ECPVS_ENCRYPTION_STREAM.

iv

The initialization vector for block symmetric ciphers. Ignored for the stream cipher. HU_ECPVS_ENCRYPTION_STREAM.

padLen

The number of bytes of additional redundancy. It should be in the range 1..255.

recoverableMessageLen

The length (in bytes) of recoverableMessage. Set to 0 if there is no recoverable part of the message.

recoverableMessage

The recoverable part of the message. This can be NULL if there is no recoverable part of the message.

visibleMessageLen

The length (in bytes) of visibleMessage.

visibleMessage

The visible part of the message.

sLen

The length (in bytes) of sValue.

sValue

The s component from the signature computation.

rLen

The length (in bytes) of rValue.

rValue

The r component from the signature computation.

sbCtx

A global context.

Library:

libhuapi (For the qcc command, use the -l huapi option to link against this library)

Description:

The ANSI X9.92-conformant usage of this API function should include only security primitives with the security level set at more than 80 bits.

The ECC parameter object must have been created with an RNG context.

Provide output buffer in sValue, and indicate the amount in sLen. If sufficient amount of buffer is supplied, this function will place the value of s into sValue and set the actual length in sLen. If the buffer is insufficient, this function will return an error.

If sValue is NULL, this function will set the correct length of s in sLen.

Similarly for r.

The length of r is variable, dependent on both the amount of padding and the desired length of the recoverable portion of the message.

There is no restriction on the length of the recoverable portion of the message.

The length of s can also be determined by calling hu_ECCParamsGet() and retrieving the OrdLen argument.

Currently only the KDF-based symmetric stream cipher (i.e. HU_ECPVS_ENCRYPTION_STREAM) is supported.

Returns:

SB_ERR_NULL_PARAMS

The eccParams object is NULL.

SB_ERR_BAD_PARAMS

The eccParams object is invalid.

SB_ERR_NULL_PRIVATE_KEY

The privateKey object is NULL.

SB_ERR_BAD_PRIVATE_KEY

The privateKey object is invalid.

SB_ERR_NULL_GLOBAL_CTX

Global context is NULL.

SB_ERR_HASH_TYPE

The hash algorithm is not supported.

SB_ERR_BAD_ALG

The KDF algorithm or encryption is not supported.

SB_ERR_BAD_LENGTH

The padLen is out of range or ivLen is too large.

SB_ERR_NULL_INPUT_BUF

The recoverable or visible part of the message is NULL, or iv is NULL, and the corresponding length parameter is greater than 0.

SB_ERR_NULL_S_VALUE_LEN

The signature component length is NULL.

SB_ERR_BAD_S_VALUE_LEN

The signature component length is invalid.

SB_ERR_NULL_R_VALUE_LEN

The signature component length is NULL.

SB_ERR_BAD_R_VALUE_LEN

The signature component length is invalid.

SB_FAIL_ALLOC

Memory allocation failure.

SB_SUCCESS

Success.

Last modified: 2014-05-14



Got questions about leaving a comment? Get answers from our Disqus FAQ.

comments powered by Disqus