SCP02.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:asterix 作者: suma12 项目源码 文件源码
def deriveKeys(self, card_challenge):
        """ Derive session keys and calculate host_ and card_ cryptograms."""

        # session keys derivation
        k = DES3.new(self.i & M_BASEKEY and self.base_S_MAC or self.base_KEY,
                     DES.MODE_CBC, IV=ZERO8)
        self.ses_C_MAC = k.encrypt(unhexlify("0101") + self.seqCounter +
                                   ZERO12)
        k = DES3.new(self.i & M_BASEKEY and self.base_S_MAC or self.base_KEY,
                     DES.MODE_CBC, IV=ZERO8)
        self.ses_R_MAC = k.encrypt(unhexlify("0102") + self.seqCounter +
                                   ZERO12)

        k = DES3.new(self.i & M_BASEKEY and self.base_DEK or self.base_KEY,
                     DES.MODE_CBC, IV=ZERO8)
        self.ses_DEK = k.encrypt(unhexlify("0181") + self.seqCounter + ZERO12)

        k = DES3.new(self.i & M_BASEKEY and self.base_S_ENC or self.base_KEY,
                     DES.MODE_CBC, IV=ZERO8)
        self.ses_ENC = k.encrypt(unhexlify("0182") + self.seqCounter + ZERO12)

        # key for MAC encryption
        if self.i & M_ICV_ENC:
            self.k_icv = DES.new(self.ses_C_MAC[:8], DES.MODE_ECB)

        # card cryptogram calculation
        if self.i & M_PSEUDO:
            self.card_challenge = self.calcMAC_1d(self.SD_AID, True)[:6]
        else:
            assert len(card_challenge) == 6,\
                "Wrong length or missing card challenge (mandatory)"
            self.card_challenge = card_challenge

        self.host_cryptogram = self.calcMAC_3d(self.seqCounter +
                                               self.card_challenge +
                                               self.host_challenge)
        self.card_cryptogram = self.calcMAC_3d(self.host_challenge +
                                               self.seqCounter +
                                               self.card_challenge)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号