⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sha_asm.asm

📁 Pipe类 Pipe类 Pipe类 Pipe类 Pipe类
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; #####################################################################################################################
;
; SHA_asm.asm
;
; Copyright (c) Shareaza Development Team, 2002-2004.
; This file is part of SHAREAZA (www.shareaza.com)
;
; Shareaza is free software; you can redistribute it
; and/or modify it under the terms of the GNU General Public License
; as published by the Free Software Foundation; either version 2 of
; the License, or (at your option) any later version.
;
; Shareaza is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with Shareaza; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;
; #####################################################################################################################
;
; SHA_asm - Implementation of SHA-1 for x86 - use together with SHA.cpp and SHA.h
;
; created              4.7.2004         by Camper
;
; last modified        20.7.2004         by Camper
;
; The integration into other projects than Shareaza is expressivly encouraged. Feel free to contact me about it.
;
; #####################################################################################################################

                        .586p
                        .model      flat, C 
                        option      casemap:none                    ; case sensitive
                        option      prologue:none                   ; we generate our own entry/exit code
                        option      epilogue:none

; #####################################################################################################################

CSHA_MemberStart		EQU			4										; skip vtbl

m_nCount0               EQU         CSHA_MemberStart+0                      ; offsets as found in SHA.h
m_nCount1               EQU         CSHA_MemberStart+4

m_nHash0                EQU         CSHA_MemberStart+8
m_nHash1                EQU         CSHA_MemberStart+12
m_nHash2                EQU         CSHA_MemberStart+16
m_nHash3                EQU         CSHA_MemberStart+20
m_nHash4                EQU         CSHA_MemberStart+24

m_nBuffer               EQU         CSHA_MemberStart+28


						.data
SHA_asm_m_nCount0		DD		m_nCount0
SHA_asm_m_nCount1       DD		m_nCount1
SHA_asm_m_nHash0        DD		m_nHash0
SHA_asm_m_nHash1        DD		m_nHash1
SHA_asm_m_nHash2        DD		m_nHash2
SHA_asm_m_nHash3        DD		m_nHash3
SHA_asm_m_nHash4        DD		m_nHash4
SHA_asm_m_nBuffer       DD		m_nBuffer

						PUBLIC SHA_asm_m_nCount0
						PUBLIC SHA_asm_m_nCount1
						PUBLIC SHA_asm_m_nHash0
						PUBLIC SHA_asm_m_nHash1
						PUBLIC SHA_asm_m_nHash2
						PUBLIC SHA_asm_m_nHash3
						PUBLIC SHA_asm_m_nHash4
						PUBLIC SHA_asm_m_nBuffer


RND_CH                  MACRO       const:REQ

; t=a; a=rotl32(a,5)+e+k+w[i]+((b&c)^(~b&d)); e=d; d=c; c=rotl32(b,30); b=t

                        mov         reg_temp1, reg_a                        ; t=a
                        mov         reg_temp2, reg_c                        ; save c
                        rol         reg_a, 5
                        add         reg_a, reg_e
                        mov         reg_e, reg_b
                        and         reg_b, reg_c                            ; b&c
                        mov         reg_c, reg_e
                        not         reg_e
                        add         reg_a, const
                        ror         reg_c, 2                                ; c=rotl32(b,30)
                        and         reg_e, reg_d                            ; ~b&d
                        add         reg_a, [_w+count*4]
                        xor         reg_b, reg_e                            ; ( )^( )
                        add         reg_a, reg_b
reg_t                   textequ     reg_e
reg_e                   textequ     reg_d                                   ; e=d, saves mov reg_e,reg_d
reg_d                   textequ     reg_temp2                               ; d=c, saves mov reg_d,reg_temp2
reg_temp2               textequ     reg_t
reg_t                   textequ     reg_b                                   ; b=t
reg_b                   textequ     reg_temp1                               ; save mov reg_d,reg_temp1
reg_temp1               textequ     reg_t
count                   =           count + 1

                        ENDM                                                ; RND_CH

RND_PARITY              MACRO       const:REQ

; t=a; a=rotl32(a,5)+e+k+w[i]+(b^c^d); e=d; d=c; c=rotl32(b,30); b=t

                        mov         reg_temp1, reg_a                        ; t=a
                        rol         reg_a, 5
                        add         reg_a, reg_e
                        mov         reg_e, reg_b
                        add         reg_a, const
reg_t                   textequ     reg_b
reg_b                   textequ     reg_e                                   ; b<->e
reg_e                   textequ     reg_t
                        xor         reg_e, reg_c
                        add         reg_a, [_w+count*4]
                        xor         reg_e, reg_d
                        add         reg_a, reg_e
                        ror         reg_b, 2
reg_t                   textequ     reg_e
reg_e                   textequ     reg_d                                   ; e=d
reg_d                   textequ     reg_c                                   ; d=c
reg_c                   textequ     reg_b                                   ; c=rotl(b,30)
reg_b                   textequ     reg_temp1                               ; b=t
reg_temp1               textequ     reg_t
count                   =           count + 1

                        ENDM                                                ; RND_PARITY

RND_MAJ                 MACRO       const:REQ

; t=a; a=rotl32(a,5)+e+k+w[i]+((b&c)^(b&d)^(c&d)); e=d; d=c; c=rotl32(b,30); b=t

                        mov         _t, reg_a
                        rol         reg_a, 5
                        mov         reg_temp1, reg_c
                        mov         reg_temp2, reg_d
                        add         reg_a, reg_e
                        mov         reg_e, reg_b
reg_t                   textequ     reg_b
reg_b                   textequ     reg_e
reg_e                   textequ     reg_t
                        and         reg_e, reg_c
                        add         reg_a, const
                        and         reg_c, reg_d
                        add         reg_a, [_w+count*4]
                        and         reg_d, reg_b
                        xor         reg_e, reg_c
                        xor         reg_e, reg_d
                        add         reg_a, reg_e
reg_t                   textequ     reg_c
reg_c                   textequ     reg_b                                   ; c=rotl32(b,30)
reg_b                   textequ     reg_t
                        mov         reg_b, _t                               ; b=t
                        ror         reg_c, 2
reg_t                   textequ     reg_e
reg_e                   textequ     reg_temp2                               ; e=d
reg_temp2               textequ     reg_t
reg_t                   textequ     reg_d
reg_d                   textequ     reg_temp1                               ; d=c
reg_temp1               textequ     reg_t
count                   =           count + 1

                        ENDM                                                ; RND_MAJ
                        
INIT_REG_ALIAS          MACRO
reg_accu                textequ     <eax>
reg_base                textequ     <ebp>
reg_i_1                 textequ     <ebx>
reg_i_2                 textequ     <ecx>
reg_i_3                 textequ     <edx>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -