I have extracted these from the Eboot.elf aswell as the Default.xex. These are all the direct links to the Black Ops Encryption SRC code. Some are used for packet encryption, some are used for file encryption.
You can Download these and experiment with your own decryption programs.
You must login or register to view this content. (Expand File List)
libtomcrypt-1.17\\src\\modes\\ctr\\ctr_done.c"
libtomcrypt-1.17\\src\\modes\\ctr\\ctr_encrypt.c"
libtomcrypt-1.17\\src\\modes\\ctr\\ctr_start.c"
libtomcrypt-1.17\\src\\misc\\crypt\\crypt_register_cipher.c"
libtomcrypt-1.17\\src\\ciphers\\aes\\aes.c"
libtomcrypt-1.17\\src\\misc\\crypt\\crypt_register_hash.c"
libtomcrypt-1.17\\src\\hashes\\sha2\\sha256.c"
libtomcrypt-1.17\\src\\math\\ltm_desc.c"
libtomcrypt-1.17\\src\\pk\\rsa\\rsa_free.c"
libtomcrypt-1.17\\src\\pk\\rsa\\rsa_verify_hash.c"
libtomcrypt-1.17\\src\\pk\\rsa\\rsa_import.c"
libtomcrypt-1.17\\src\\misc\\crypt\\crypt_find_hash.c"
libtomcrypt-1.17\\src\\modes\\ctr\\ctr_decrypt.c"
libtomcrypt-1.17\\src\\misc\\zeromem.c"
libtomcrypt-1.17\\src\\pk\\ecc\\ltc_ecc_mulmod.c"
libtomcrypt-1.17
\\src\\pk\\ecc\\ltc_ecc_map.c"
libtomcrypt-1.17\\src\\pk\\rsa\\rsa_exptmod.c"
libtomcrypt-1.17\\src\\pk\\ecc\\ltc_ecc_projective_add_point.c"
libtomcrypt-1.17\\src\\pk\\rsa\\rsa_make_key.c"
libtomcrypt-1.17\\src\\pk\\ecc\\ltc_ecc_projective_dbl_point.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\sequence\\der_decode_sequence_ex.c"
libtomcrypt-1.17\\src\\pk\\pkcs1\\pkcs_1_pss_decode.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\sequence\\der_decode_sequence_multi.c"
libtomcrypt-1.17\\src\\math\\rand_prime.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\integer\\der_decode_integer.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\object_identifier\\der_decode_object_identifier.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\boolean\\der_length_boolean.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\integer\\der_length_integer.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\octet\\der_decode_octet_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\short_integer\\der_decode_short_integer.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\utf8\\der_decode_utf8_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\bit\\der_length_bit_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\boolean\\der_decode_boolean.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\sequence\\der_length_sequence.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\short_integer\\der_length_short_integer.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\utf8\\der_length_utf8_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\ia5\\der_length_ia5_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\printable_string\\der_decode_printable_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\printable_string\\der_length_printable_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\choice\\der_decode_choice.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\utctime\\der_decode_utctime.c"
.libtomcrypt-1.17\\src\\pk\\asn1\\der\\octet\\der_length_octet_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\object_identifier\\der_length_object_identifier.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\ia5\\der_decode_ia5_string.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\bit\\der_decode_bit_string.c"
libtomcrypt-1.17\\src\\pk\\pkcs1\\pkcs_1_mgf1.c"
libtomcrypt-1.17\\src\\pk\\asn1\\der\\utctime\\der_length_utctime.c"
libtomcrypt-1.17\\src\\hashes\\helper\\hash_memory.c"
libtomcrypt-1.17\\src\\hashes\\tiger.c"
Here is an example of the RSA_MAKE_KEY SRC
#include "tomcrypt.h"
/**
@file rsa_make_key.c
RSA key generation, Tom St Denis
*/
#ifdef LTC_MRSA
/**
Create an RSA key
@param prng An active PRNG state
@param wprng The index of the PRNG desired
@param size The size of the modulus (key size) desired (octets)
@param e The "e" value (public key). e==65537 is a good choice
@param key [out] Destination of a newly created private key pair
@return CRYPT_OK if successful, upon error all allocated ram is freed
*/
int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key)
{
void *p, *q, *tmp1, *tmp2, *tmp3;
int err;
LTC_ARGCHK(ltc_mp.name != NULL);
LTC_ARGCHK(key != NULL);
if ((size < (MIN_RSA_SIZE/; ) || (size> (MAX_RSA_SIZE/; )) {
return CRYPT_INVALID_KEYSIZE;
}
if ((e < 3) || ((e & 1) == 0)) {
return CRYPT_INVALID_ARG;
}
if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
return err;
}
if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, &tmp3, NULL)) != CRYPT_OK) {
return err;
}
/* make primes p and q (optimization provided by Wayne Scott) */
if ((err = mp_set_int(tmp3, e)) != CRYPT_OK) { goto errkey; } /* tmp3 = e */
/* make prime "p" */
do {
if ((err = rand_prime( p, size/2, prng, wprng)) != CRYPT_OK) { goto errkey; }
if ((err = mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto errkey; } /* tmp1 = p-1 */
if ((err = mp_gcd( tmp1, tmp3, tmp2)) != CRYPT_OK) { goto errkey; } /* tmp2 = gcd(p-1, e) */
} while (mp_cmp_d( tmp2, 1) != 0); /* while e divides p-1 */
/* make prime "q" */
do {
if ((err = rand_prime( q, size/2, prng, wprng)) != CRYPT_OK) { goto errkey; }
if ((err = mp_sub_d( q, 1, tmp1)) != CRYPT_OK) { goto errkey; } /* tmp1 = q-1 */
if ((err = mp_gcd( tmp1, tmp3, tmp2)) != CRYPT_OK) { goto errkey; } /* tmp2 = gcd(q-1, e) */
} while (mp_cmp_d( tmp2, 1) != 0); /* while e divides q-1 */
/* tmp1 = lcm(p-1, q-1) */
if ((err = mp_sub_d( p, 1, tmp2)) != CRYPT_OK) { goto errkey; } /* tmp2 = p-1 */
/* tmp1 = q-1 (previous do/while loop) */
if ((err = mp_lcm( tmp1, tmp2, tmp1)) != CRYPT_OK) { goto errkey; } /* tmp1 = lcm(p-1, q-1) */
/* make key */
if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, NULL)) != CRYPT_OK) {
goto errkey;
}
if ((err = mp_set_int( key->e, e)) != CRYPT_OK) { goto errkey; } /* key->e = e */
if ((err = mp_invmod( key->e, tmp1, key->d)) != CRYPT_OK) { goto errkey; } /* key->d = 1/e mod lcm(p-1,q-1) */
if ((err = mp_mul( p, q, key->N)) != CRYPT_OK) { goto errkey; } /* key->N = pq */
/* optimize for CRT now */
/* find d mod q-1 and d mod p-1 */
if ((err = mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto errkey; } /* tmp1 = q-1 */
if ((err = mp_sub_d( q, 1, tmp2)) != CRYPT_OK) { goto errkey; } /* tmp2 = p-1 */
if ((err = mp_mod( key->d, tmp1, key->dP)) != CRYPT_OK) { goto errkey; } /* dP = d mod p-1 */
if ((err = mp_mod( key->d, tmp2, key->dQ)) != CRYPT_OK) { goto errkey; } /* dQ = d mod q-1 */
if ((err = mp_invmod( q, p, key->qP)) != CRYPT_OK) { goto errkey; } /* qP = 1/q mod p */
if ((err = mp_copy( p, key->p)) != CRYPT_OK) { goto errkey; }
if ((err = mp_copy( q, key->q)) != CRYPT_OK) { goto errkey; }
/* set key type (in this case it's CRT optimized) */
key->type = PK_PRIVATE;
/* return ok and free temps */
err = CRYPT_OK;
goto cleanup;
errkey:
mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, key->qP, key->p, key->q, NULL);
cleanup:
mp_clear_multi(tmp3, tmp2, tmp1, p, q, NULL);
return err;
}
#endif