Esempio n. 1
0
int crypto_aead_encrypt(
		unsigned char *c, unsigned long long *clen,
		const unsigned char *m, unsigned long long mlen,
		const unsigned char *ad, unsigned long long adlen,
		const unsigned char *nsec, 
		const unsigned char *npub,
		const unsigned char *k
		)
{
	if(mlen == 0 && adlen == 0) return RETURN_UNSUPPORTED;
	/* set ciphertext length */
	*clen = mlen + CRYPTO_ABYTES;

	unsigned char tag[CRYPTO_ABYTES];
	ae_cxt* cxt = ae_allocate();
	if(!cxt)
		return RETURN_MEMORY_FAIL;

	/* set key and compute round keys */
	if(ae_init(cxt, k, CRYPTO_KEYBYTES))
		return RETURN_KEYSIZE_ERR;

	/* process the associated data */
	process_ad(cxt, ad, adlen, npub, CRYPTO_NPUBBYTES);

	/* encrypt message */
	ae_encrypt(cxt, (unsigned char*)m, mlen, c);

	free(cxt);

	return RETURN_SUCCESS;
}
Esempio n. 2
0
int crypto_aead_decrypt(
		unsigned char *m,unsigned long long *mlen,
		unsigned char *nsec,                                //not relavent to CLOC
		const unsigned char *c,unsigned long long clen,
		const unsigned char *ad,unsigned long long adlen,
		const unsigned char *npub,
		const unsigned char *k
		)
{
    /* set plaintext length */
    *mlen = clen - CRYPTO_ABYTES;
    
    unsigned char tag[CRYPTO_ABYTES];
    ae_cxt* cxt = ae_allocate();
    if(!cxt)
        return RETURN_MEMORY_FAIL;
    
    /* set key and compute round keys */
    ae_init(cxt, k, CRYPTO_KEYBYTES * 8);
    
    /* process the associated data */
    process_ad(cxt, ad, adlen, npub, CRYPTO_NPUBBYTES);
    
    /* decrypt ciphertext */
    ae_encrypt(cxt, m, *mlen, (unsigned char*)c, tag, CRYPTO_ABYTES, DEC);
    
    /* compare the tag */
    int i;
    for(i = 0; i < CRYPTO_ABYTES; i++)
        if(tag[i] != c[(*mlen) + i]){
            return RETURN_TAG_NO_MATCH;
        }
    
	return RETURN_SUCCESS;
}
Esempio n. 3
0
int crypto_aead_encrypt(
		unsigned char *c, unsigned long long *clen,
		const unsigned char *m, unsigned long long mlen,
		const unsigned char *ad, unsigned long long adlen,
		const unsigned char *nsec,                          //not relavent to CLOC
		const unsigned char *npub,
		const unsigned char *k
		)
{
    /* set ciphertext length */
    *clen = mlen + CRYPTO_ABYTES;
    
    unsigned char tag[CRYPTO_ABYTES];
    ae_cxt* cxt = ae_allocate();
    if(!cxt)
        return RETURN_MEMORY_FAIL;
    
    /* set key and compute round keys */
    ae_init(cxt, k, CRYPTO_KEYBYTES * 8);
    
    /* process the associated data */
    process_ad(cxt, ad, adlen, npub, CRYPTO_NPUBBYTES);
    
    /* encrypt message */
    ae_encrypt(cxt, (unsigned char*)m, mlen, c, tag, CRYPTO_ABYTES, ENC);
    
    /* copy the tag to the end of ciphertext */
    memcpy(c+mlen, tag, CRYPTO_ABYTES);
	return RETURN_SUCCESS;
}
Esempio n. 4
0
int crypto_aead_decrypt(
		unsigned char *m,unsigned long long *mlen,
		unsigned char *nsec,      
		const unsigned char *c,unsigned long long clen,
		const unsigned char *ad,unsigned long long adlen,
		const unsigned char *npub,
		const unsigned char *k
		)
{
	/* set plaintext length */
	*mlen = clen - CRYPTO_ABYTES;
	if(mlen == 0 && adlen == 0) return RETURN_UNSUPPORTED;

	unsigned char tag[CRYPTO_ABYTES*2];
	ae_cxt* cxt = ae_allocate();
	if(!cxt)
		return RETURN_MEMORY_FAIL;

	/* set key and compute round keys */
	if(ae_init(cxt, k, CRYPTO_KEYBYTES))
		return RETURN_KEYSIZE_ERR;

	/* process the associated data */
	process_ad(cxt, ad, adlen, npub, CRYPTO_NPUBBYTES);

	/* decrypt ciphertext */
	ae_decrypt(cxt, m, clen, (unsigned char*)c, tag);

	free(cxt);

	/* compare the tag */
	int i;
	if((*mlen) > SLEN && (*mlen % SLEN))
	{
		for(i = 0; i < CRYPTO_ABYTES; i++)
			if(tag[i] != tag[SLEN + i]){
				return RETURN_TAG_NO_MATCH;
			}
	}
	else
		for(i = 0; i < CRYPTO_ABYTES; i++)
			if(tag[i] != c[(*mlen) + i]){
				return RETURN_TAG_NO_MATCH;
			}

	return RETURN_SUCCESS;
}
Esempio n. 5
0
/* #define NEW_2_SCHEME 0 */
/* #define NEW_3_SCHEME 0 */

/* #define ENCRYPT 0 */
/* #define DECRYPT 0 */

int main(int argc, char **argv)
{
	/* Allocate locals */
	ALIGN(16) char pt[8*1024] = {0};
	ALIGN(16) char tag[16];
	ALIGN(16) unsigned char key[] = "abcdefghijklmnop";
	ALIGN(16) unsigned char nonce[] = "abcdefghijklmnop";
	char outbuf[MAX_ITER*15+1024];
	int iter_list[2048]; /* Populate w/ test lengths, -1 terminated */
	ae_ctx* ctx = ae_allocate(NULL);
	char *outp = outbuf;
	int i, j, len;
	double Hz;
	double ipi=0, tmpd;

	/* populate iter_list, terminate list with negative number */
	for (i=0; i<MAX_ITER; ++i)
		iter_list[i] = i+1;
	if (MAX_ITER < 44) iter_list[i++] = 44;
	if (MAX_ITER < 552) iter_list[i++] = 552;
	if (MAX_ITER < 576) iter_list[i++] = 576;
	if (MAX_ITER < 1500) iter_list[i++] = 1500;
	if (MAX_ITER < 4096) iter_list[i++] = 4096;
	iter_list[i] = -1;