Какие данные используются для вычисления сообщения sha256 этого сообщения asn.1?

После некоторого исследования:

val source = PublishSubject.create<String>()

var state = "state1"
    get() = field // redundant: only to show it's possible to get state directly: maybe for class internal usages
    set(value) {
        field = value
        source.onNext(field)
    }

Теперь используйте обычный subscribe s или создайте новый Observable из source

source.subscribe(...)
0
задан traviscoder 18 January 2019 в 23:14
поделиться

1 ответ

Это сообщение CMS-ранее-PKCS7 SignedData , определенное в rfc5652 et pred с подписанным. Дайджест, который вы цитируете, который является элементом messagedigest в signatureattrs, соответствует описанию, приведенному в 5.4, дайджесту части значения eContent OCTET STRING в encapContentInfo, как описано в 5.2.

Так как вы не показали никакого кода для начала, вот примерно абсолютный минимум:

#include <stdio.h>
#include <openssl/cms.h>
#include <openssl/bio.h>
#include <openssl/asn1.h>

int main (void){
  unsigned char hash[32]; 

  // TEST CODE doesn't check or handle errors; DON'T USE FOR REAL
  BIO *in = BIO_push (BIO_new(BIO_f_base64()), BIO_new_file ("54262612.pem","r"));
  // file's PEM type not understood by PEM_read_PKCS7; rather than fixing
  PKCS7 *outer = d2i_PKCS7_bio (in, NULL); // just bypass it
  // assume signeddata with (nonomitted) content octetstring; should check
  ASN1_OCTET_STRING *cont = outer->d.sign->contents->d.data;

  // assume hash is sha256; should check digestalgs and signerinfo(s)
  EVP_Digest (cont->data, cont->length, hash, NULL, EVP_sha256(), NULL);
  for( int i = 0; i < 32; i++ ) printf ("%02x", hash[i]); putchar ('\n');
  return 0;
}
0
ответ дан dave_thompson_085 18 January 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: