RET_CODE sys_get_host_key(UINT8 *key, UINT32 *len, UINT32 type) { unsigned long addr; CIPLUS_KEY_HDR hdr; UINT8 aes_key[16]; UINT8 *encryped_data; struct sto_device *dev = (struct sto_device *)dev_get_by_id(HLD_DEV_TYPE_STO, 0); libc_printf("%s - type %d\n",__FUNCTION__,type); if(RET_SUCCESS != find_key(CIPLUS_KEY_AES_KEY, &addr, &hdr)) return RET_FAILURE; sto_get_data(dev, aes_key, addr, 16); if(RET_SUCCESS != find_key(type, &addr, &hdr)) return RET_FAILURE; encryped_data = (UINT8 *)MALLOC(hdr.size); //encryped_data = g_ci_tmp_buff; sto_get_data(dev, encryped_data, addr, hdr.size); decrypt_key(encryped_data, key, aes_key, hdr.size); if(len) *len = hdr.size; FREE(encryped_data); return RET_SUCCESS; }
int main(int argc, char **argv) { char *encrypted_key = "fhcrefrperg"; char key_copy[100]; strcpy(key_copy, encrypted_key); decrypt_key(key_copy); return 0; }
GByteArray * crypto_decrypt_private_key_data (const GByteArray *contents, const char *password, NMCryptoKeyType *out_key_type, GError **error) { GByteArray *decrypted = NULL; NMCryptoKeyType key_type = NM_CRYPTO_KEY_TYPE_RSA; GByteArray *data; char *iv = NULL; char *cipher = NULL; g_return_val_if_fail (contents != NULL, NULL); if (out_key_type) g_return_val_if_fail (*out_key_type == NM_CRYPTO_KEY_TYPE_UNKNOWN, NULL); /* OpenSSL non-standard legacy PEM files */ /* Try RSA keys first */ data = parse_old_openssl_key_file (contents, key_type, &cipher, &iv, error); if (!data) { g_clear_error (error); /* DSA next */ key_type = NM_CRYPTO_KEY_TYPE_DSA; data = parse_old_openssl_key_file (contents, key_type, &cipher, &iv, error); if (!data) { g_clear_error (error); g_set_error (error, NM_CRYPTO_ERROR, NM_CRYPTO_ERR_FILE_FORMAT_INVALID, _("Unable to determine private key type.")); } } if (data) { /* return the key type even if decryption failed */ if (out_key_type) *out_key_type = key_type; if (password) { decrypted = decrypt_key (cipher, key_type, data, iv, password, error); } g_byte_array_free (data, TRUE); } g_free (cipher); g_free (iv); return decrypted; }
int main(int argc, char* argv[]) { uint8* pass = NULL; uint8* key = NULL; if (argc < 3) { fprintf(stderr, "usage: genpass <platform> <ramdisk.dmg> <filesystem.dmg>\n"); return -1; } char* platform = argv[1]; char* ramdisk = argv[2]; char* filesystem = argv[3]; pass = generate_passphrase(platform, ramdisk); if (pass == NULL) { fprintf(stderr, "unable to generate asr passphrase\n"); return -1; } //printf("asr passphrase: "); //print_hex(pass, 0x20); key = decrypt_key(filesystem, pass); if (key == NULL) { fprintf(stderr, "unable to decrypt vfdecrypt key\n"); return -1; } printf("vfdecrypt key: "); print_hex(key, 0x24); if (pass) free(pass); if (key) free(key); return 0; }