Firefox-Sync-Client
view release on metacpan or search on metacpan
lib/Firefox/Sync/Client.pm view on Meta::CPAN
}
sub sync_key_to_enc_key {
my $self = shift;
my $s_key = $self->{'sync_key'};
$s_key =~ s/8/l/g;
$s_key =~ s/9/o/g;
$s_key =~ s/-//g;
$s_key = uc($s_key);
my $raw_bits = MIME::Base32::decode($s_key);
my $key = hmac_sha256('Sync-AES_256_CBC-HMAC256' . $self->{'username'} . "\x01", $raw_bits);
return $key;
}
sub fetch_bulk_keys {
my $self = shift;
my $json = fetch_json($self, $self->{'base_url'} . 'storage/crypto/keys');
my $keys = decrypt_collection($self, decode_json($json->{'payload'}), 'crypto');
my $default_keys = decode_json($keys);
$self->{'bulk_keys'}{'default'} = decode_base64($default_keys->{'default'}[0]);
return $self->{'bulk_keys'};
}
sub decrypt_payload {
my ($self, $payload, $key) = @_;
my $c = Crypt::Rijndael->new($key, Crypt::Rijndael::MODE_CBC());
$c->set_iv(decode_base64($payload->{'IV'}));
my $data = $c->decrypt(decode_base64($payload->{'ciphertext'}));
$data = repair_json($self, $data);
return $data;
}
sub decrypt_collection {
my ($self, $payload, $collection) = @_;
( run in 1.119 second using v1.01-cache-2.11-cpan-e1769b4cff6 )