Exemple #1
0
int main(int argc,char *argv[])
{
    if(argc < 2)
    {
        printf("usage:\n");
        printf("%s string.\n",argv[0]);
        return 0;
    }
    char *encdata = NULL;
    int encLen = (strlen(argv[1])/16+1)*16;
    encdata = malloc(encLen);

	sm4_context ctx;
	sm4_setkey_enc(&ctx,key);
    sm4_crypt_ecb(&ctx,1,strlen((const char *)argv[1]),argv[1],encdata);
    printf("Enc Data[%d] :",encLen);
    printHex(encdata,encLen);

    char *decdata = malloc(encLen);
   sm4_setkey_dec(&ctx,key);
   sm4_crypt_ecb(&ctx,0,encLen,encdata,decdata);

   printf("Dec Data:%s\n",decdata);


   free(encdata);
   free(decdata);
}
Exemple #2
0
int crypt_dec_init(cipher_context *cctx, uint8 *ck, int ckl, uint8 *iv, int alg)
{
	switch(alg&MASK_ALG){
	case ALG_AES:
		cctx->enc_ctx = (AES_KEY *)malloc(sizeof(AES_KEY));
		cctx->block_size=AES_BLOCK_SIZE;
		if(ckl<AES_KEY_LENGTH)
			return 0;
		if( alg == ALG_AES_CTR )
			AES_set_encrypt_key(ck, ckl*8, cctx->enc_ctx);
		else
			AES_set_decrypt_key(ck, ckl*8, cctx->enc_ctx);
		if(iv)
			memcpy(cctx->iv, iv, cctx->block_size);
		break;
	case ALG_SM4:
		cctx->enc_ctx = (sm4_context *)malloc(sizeof(sm4_context));
		cctx->block_size=SM4_BLOCK_SIZE;
		if(ckl<SM4_KEY_LENGTH)
			return 0;
		if( alg == ALG_SM4_CTR )
			sm4_setkey_enc(cctx->enc_ctx, ck);
		else
			sm4_setkey_dec(cctx->enc_ctx, ck);
		if(iv)
			memcpy(cctx->iv, iv, cctx->block_size);
		break;
	default:
		return 0;
	}

	cctx->alg=alg;
	cctx->count=0;
	cctx->flag=0;
	
	return 1;
}