1package OpenXPKI::Server::API2::Plugin::Crypto::get_key_identifier_from_data;
2use OpenXPKI::Server::API2::EasyPlugin;
3
4=head1 NAME
5
6OpenXPKI::Server::API2::Plugin::Crypto::get_key_identifier_from_data
7
8=cut
9
10# Core modules
11use Digest::SHA qw(sha1_hex);
12
13# Project modules
14use OpenXPKI::Server::Context qw( CTX );
15use OpenXPKI::Server::API2::Types;
16use OpenXPKI::Crypt::PKCS10;
17
18=head1 COMMANDS
19
20=head2 get_key_identifier_from_data
21
22returns the key identifier (sha1 hash of the public key bit string) of the
23given data as string, uppercased hex with colons.
24
25=over
26
27=item DATA
28
29Data, encoded as given by FORMAT parameter.
30
31=item FORMAT
32
33* PKCS10: PEM encoded PKCS10 block
34
35=back
36
37B<Parameters>
38
39=over
40
41=item * C<XXX> I<Bool> - XXX. Default: XXX
42
43=back
44
45=cut
46command "get_key_identifier_from_data" => {
47    data   => { isa => 'PEM', required => 1, },
48    format => { isa => 'Str', matching => qr/( \A (PKCS10) \z )/msx, required => 1, },
49} => sub {
50    my ($self, $params) = @_;
51
52    # we currently only support PKCS10
53
54    my $pkcs10 = OpenXPKI::Crypt::PKCS10->new( $params->data );
55    OpenXPKI::Exception->throw(message => 'Unable to parse data in get_key_identifier_from_data') if (!$pkcs10);
56
57    return $pkcs10->get_subject_key_id();
58};
59
60__PACKAGE__->meta->make_immutable;
61