diff --git a/cr_hsm_code.c b/cr_hsm_code.c index 8618481..eda5de5 100644 --- a/cr_hsm_code.c +++ b/cr_hsm_code.c @@ -316,6 +316,8 @@ int hsm_get_rtc( time_t *time ) return CR_GENID_SUCCESS; } // hsm_get_rtc +#ifdef ENCYRPT_AES + int hsm_aes_load_key( void ) { int ret_code = 0; @@ -383,6 +385,105 @@ int hsm_aes_load_key( void ) return CR_GENID_SUCCESS; } // hsm_aes_load_key +int hsm_aes_encrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) +{ + int ret_code = 0; + + M_Command cmd; + M_Reply reply; + M_IV enc_iv; + + memset( &cmd, 0, sizeof( cmd ) ); + memset( &reply, 0, sizeof( reply ) ); + + // iv set + enc_iv.mech = Mech_RijndaelmCBCpNONE; + memset( enc_iv.iv.generic128.iv.bytes, 0, sizeof( enc_iv.iv.generic128.iv.bytes ) ); + + // encrypt command set + cmd.cmd = Cmd_Encrypt; + cmd.args.encrypt.key = hsmAeskeyid; + cmd.args.encrypt.mech = Mech_RijndaelmCBCpNONE; + cmd.args.encrypt.plain.type = PlainTextType_Bytes; + cmd.args.encrypt.plain.data.bytes.data.len = size; + cmd.args.encrypt.plain.data.bytes.data.ptr = org_buf; + cmd.args.encrypt.flags = Cmd_Encrypt_Args_flags_given_iv_present; + cmd.args.encrypt.given_iv = &enc_iv; + + // encrypt command issue + ret_code = NFastApp_Transact( hsmConnection, NULL, &cmd, &reply, NULL ); + if ( ret_code != CR_GENID_SUCCESS ) + { + printf( "error(%d) : Encryption by HSM\n", ret_code ); + return ret_code; + } + ret_code = reply.status; + if ( ret_code != CR_GENID_SUCCESS ) + { + printf( "error(%d) : Encrypt Reply Status by HSM\n", ret_code ); + return ret_code; + } + + // buffer copy + memcpy( dst_buf, reply.reply.encrypt.cipher.data.generic128.cipher.ptr, size ); + + //NFastApp_Free_Command( hsmHandle, NULL, NULL, &cmd ); // 何故かアボートする + NFastApp_Free_Reply( hsmHandle, NULL, NULL, &reply ); + + return CR_GENID_SUCCESS; +} // hsm_aes_encrypt + +int hsm_aes_decrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) +{ + int ret_code = 0; + + M_Command cmd; + M_Reply reply; + M_IV dec_iv; + + memset( &cmd, 0, sizeof( cmd ) ); + memset( &reply, 0, sizeof( reply ) ); + + // iv set + dec_iv.mech = Mech_RijndaelmCBCpNONE; + memset( dec_iv.iv.generic128.iv.bytes, 0, sizeof( dec_iv.iv.generic128.iv.bytes ) ); + + // decyrpt + cmd.cmd = Cmd_Decrypt; + cmd.args.decrypt.flags = 0; + cmd.args.decrypt.key = hsmAeskeyid; + cmd.args.decrypt.mech = Mech_RijndaelmCBCpNONE; + cmd.args.decrypt.cipher.mech = Mech_RijndaelmCBCpNONE; + cmd.args.decrypt.cipher.data.generic128.cipher.len = size; + cmd.args.decrypt.cipher.data.generic128.cipher.ptr = org_buf; + cmd.args.decrypt.cipher.iv = dec_iv.iv; + cmd.args.decrypt.reply_type = PlainTextType_Bytes; + + // decrypt command issue + ret_code = NFastApp_Transact( hsmConnection, NULL, &cmd, &reply, NULL ); + if ( ret_code != CR_GENID_SUCCESS ) + { + printf( "error(%d) : Decryption by HSM\n", ret_code ); + return ret_code; + } + ret_code = reply.status; + if ( ret_code != CR_GENID_SUCCESS ) + { + printf( "error(%d) : Decrypt Reply Status by HSM\n", ret_code ); + return ret_code; + } + + // buffer copy + memcpy( dst_buf, reply.reply.decrypt.plain.data.bytes.data.ptr, size ); + + //NFastApp_Free_Command( hsmHandle, NULL, NULL, &cmd ); // 何故かアボートする + NFastApp_Free_Reply( hsmHandle, NULL, NULL, &reply ); + + return CR_GENID_SUCCESS; +} // hsm_aes_decrypt + +#else // !ENCRYPT_AES + int hsm_rsa_load_keypair( void ) { int ret_code = 0; @@ -553,103 +654,6 @@ int hsm_rsa_load_keypair( void ) return CR_GENID_SUCCESS; } // hsm_rsa_load_keypair -int hsm_aes_encrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) -{ - int ret_code = 0; - - M_Command cmd; - M_Reply reply; - M_IV enc_iv; - - memset( &cmd, 0, sizeof( cmd ) ); - memset( &reply, 0, sizeof( reply ) ); - - // iv set - enc_iv.mech = Mech_RijndaelmCBCpNONE; - memset( enc_iv.iv.generic128.iv.bytes, 0, sizeof( enc_iv.iv.generic128.iv.bytes ) ); - - // encrypt command set - cmd.cmd = Cmd_Encrypt; - cmd.args.encrypt.key = hsmAeskeyid; - cmd.args.encrypt.mech = Mech_RijndaelmCBCpNONE; - cmd.args.encrypt.plain.type = PlainTextType_Bytes; - cmd.args.encrypt.plain.data.bytes.data.len = size; - cmd.args.encrypt.plain.data.bytes.data.ptr = org_buf; - cmd.args.encrypt.flags = Cmd_Encrypt_Args_flags_given_iv_present; - cmd.args.encrypt.given_iv = &enc_iv; - - // encrypt command issue - ret_code = NFastApp_Transact( hsmConnection, NULL, &cmd, &reply, NULL ); - if ( ret_code != CR_GENID_SUCCESS ) - { - printf( "error(%d) : Encryption by HSM\n", ret_code ); - return ret_code; - } - ret_code = reply.status; - if ( ret_code != CR_GENID_SUCCESS ) - { - printf( "error(%d) : Encrypt Reply Status by HSM\n", ret_code ); - return ret_code; - } - - // buffer copy - memcpy( dst_buf, reply.reply.encrypt.cipher.data.generic128.cipher.ptr, size ); - - //NFastApp_Free_Command( hsmHandle, NULL, NULL, &cmd ); // 何故かアボートする - NFastApp_Free_Reply( hsmHandle, NULL, NULL, &reply ); - - return CR_GENID_SUCCESS; -} // hsm_aes_encrypt - -int hsm_aes_decrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) -{ - int ret_code = 0; - - M_Command cmd; - M_Reply reply; - M_IV dec_iv; - - memset( &cmd, 0, sizeof( cmd ) ); - memset( &reply, 0, sizeof( reply ) ); - - // iv set - dec_iv.mech = Mech_RijndaelmCBCpNONE; - memset( dec_iv.iv.generic128.iv.bytes, 0, sizeof( dec_iv.iv.generic128.iv.bytes ) ); - - // decyrpt - cmd.cmd = Cmd_Decrypt; - cmd.args.decrypt.flags = 0; - cmd.args.decrypt.key = hsmAeskeyid; - cmd.args.decrypt.mech = Mech_RijndaelmCBCpNONE; - cmd.args.decrypt.cipher.mech = Mech_RijndaelmCBCpNONE; - cmd.args.decrypt.cipher.data.generic128.cipher.len = size; - cmd.args.decrypt.cipher.data.generic128.cipher.ptr = org_buf; - cmd.args.decrypt.cipher.iv = dec_iv.iv; - cmd.args.decrypt.reply_type = PlainTextType_Bytes; - - // decrypt command issue - ret_code = NFastApp_Transact( hsmConnection, NULL, &cmd, &reply, NULL ); - if ( ret_code != CR_GENID_SUCCESS ) - { - printf( "error(%d) : Decryption by HSM\n", ret_code ); - return ret_code; - } - ret_code = reply.status; - if ( ret_code != CR_GENID_SUCCESS ) - { - printf( "error(%d) : Decrypt Reply Status by HSM\n", ret_code ); - return ret_code; - } - - // buffer copy - memcpy( dst_buf, reply.reply.decrypt.plain.data.bytes.data.ptr, size ); - - //NFastApp_Free_Command( hsmHandle, NULL, NULL, &cmd ); // 何故かアボートする - NFastApp_Free_Reply( hsmHandle, NULL, NULL, &reply ); - - return CR_GENID_SUCCESS; -} // hsm_aes_decrypt - int hsm_rsa_encrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) { int ret_code = 0; @@ -735,4 +739,6 @@ int hsm_rsa_decrypt( unsigned char *dst_buf, unsigned char *org_buf, int size ) return CR_GENID_SUCCESS; } // hsm_rsa_decrypt +#endif // ENCRYPT_AES + #endif // USE_HSM