adb.adb_keygen module¶
This file implements encoding and decoding logic for Android’s custom RSA public key binary format. Public keys are stored as a sequence of little-endian 32 bit words. Note that Android only supports little-endian processors, so we don’t do any byte order conversions when parsing the binary struct.
Structure from: https://github.com/aosp-mirror/platform_system_core/blob/c55fab4a59cfa461857c6a61d8a0f1ae4591900c/libcrypto_utils/android_pubkey.c
typedef struct RSAPublicKey {
// Modulus length. This must be ANDROID_PUBKEY_MODULUS_SIZE_WORDS
uint32_t modulus_size_words;
// Precomputed montgomery parameter: -1 / n[0] mod 2^32
uint32_t n0inv;
// RSA modulus as a little-endian array
uint8_t modulus[ANDROID_PUBKEY_MODULUS_SIZE];
// Montgomery parameter R^2 as a little-endian array of little-endian words
uint8_t rr[ANDROID_PUBKEY_MODULUS_SIZE];
// RSA modulus: 3 or 65537
uint32_t exponent;
} RSAPublicKey;
Contents
-
adb.adb_keygen.
ANDROID_PUBKEY_MODULUS_SIZE
= 256¶ Size of an RSA modulus such as an encrypted block or a signature.
-
adb.adb_keygen.
ANDROID_PUBKEY_MODULUS_SIZE_WORDS
= 64¶ Size of the RSA modulus in words.
-
adb.adb_keygen.
ANDROID_RSAPUBLICKEY_STRUCT
= '<LL256s256sL'¶ Python representation of “struct RSAPublicKey”
-
adb.adb_keygen.
_to_bytes
(n, length, endianess='big')[source]¶ Partial python2 compatibility with int.to_bytes
https://stackoverflow.com/a/20793663
- Parameters
n (TODO) – TODO
length (TODO) – TODO
endianess (str, TODO) – TODO
- Returns
TODO
- Return type
TODO
-
adb.adb_keygen.
decode_pubkey
(public_key)[source]¶ Decode a public RSA key stored in Android’s custom binary format.
- Parameters
public_key (TODO) – TODO
-
adb.adb_keygen.
decode_pubkey_file
(public_key_path)[source]¶ TODO
- Parameters
public_key_path (str) – TODO
-
adb.adb_keygen.
encode_pubkey
(private_key_path)[source]¶ Encodes a public RSA key into Android’s custom binary format.
- Parameters
private_key_path (str) – TODO
- Returns
TODO
- Return type
TODO