| 513 | |
| 514 | |
| 515 | class Checksum(ASN1_Packet): |
| 516 | ASN1_codec = ASN1_Codecs.BER |
| 517 | ASN1_root = ASN1F_SEQUENCE( |
| 518 | ASN1F_enum_INTEGER( |
| 519 | "cksumtype", |
| 520 | 0, |
| 521 | _KRB_S_TYPES, |
| 522 | explicit_tag=0xA0, |
| 523 | ), |
| 524 | _Checksum_Field("checksum", "", explicit_tag=0xA1), |
| 525 | ) |
| 526 | |
| 527 | def get_usage(self): |
| 528 | """ |
| 529 | Get current key usage number |
| 530 | """ |
| 531 | # RFC 4120 sect 7.5.1 |
| 532 | if self.underlayer: |
| 533 | if isinstance(self.underlayer, KRB_Authenticator): |
| 534 | # TGS-REQ PA-TGS-REQ padata AP-REQ Authenticator cksum |
| 535 | # (n°10 should never happen as we use RFC4121) |
| 536 | return 6 |
| 537 | elif isinstance(self.underlayer, PA_FOR_USER): |
| 538 | # [MS-SFU] sect 2.2.1 |
| 539 | return 17 |
| 540 | elif isinstance(self.underlayer, PA_S4U_X509_USER): |
| 541 | # [MS-SFU] sect 2.2.2 |
| 542 | return 26 |
| 543 | elif isinstance(self.underlayer, AD_KDCIssued): |
| 544 | # AD-KDC-ISSUED checksum |
| 545 | return 19 |
| 546 | elif isinstance(self.underlayer, KrbFastArmoredReq): |
| 547 | # KEY_USAGE_FAST_REQ_CHKSUM |
| 548 | return 50 |
| 549 | elif isinstance(self.underlayer, KrbFastFinished): |
| 550 | # KEY_USAGE_FAST_FINISHED |
| 551 | return 53 |
| 552 | raise ValueError( |
| 553 | "Could not guess key usage number. Please specify key_usage_number" |
| 554 | ) |
| 555 | |
| 556 | def verify(self, key, text, key_usage_number=None): |
| 557 | """ |
| 558 | Verify a signature of text using a key. |
| 559 | |
| 560 | :param key: the key to use to check the checksum |
| 561 | :param text: the bytes to verify |
| 562 | :param key_usage_number: (optional) specify the key usage number. |
| 563 | Guessed otherwise |
| 564 | """ |
| 565 | if key_usage_number is None: |
| 566 | key_usage_number = self.get_usage() |
| 567 | key.verify_checksum(key_usage_number, text, self.checksum.val) |
| 568 | |
| 569 | def make(self, key, text, key_usage_number=None, cksumtype=None): |
| 570 | """ |
| 571 | Make a signature. |
| 572 |
no test coverage detected
searching dependent graphs…