Browse Source

订单开票

devlop
mo-bai 4 years ago
parent
commit
1e9eeb1962
15 changed files with 420 additions and 152 deletions
  1. 18
      apis/cartApi.js
  2. 55
      apis/commonApi.js
  3. 7
      apis/enquiryListApi.js
  4. 27
      apis/orderApi.js
  5. 13
      apis/paperDetailsApi.js
  6. 40
      apis/testApi.js
  7. 17
      enums/index.js
  8. 8
      pages.json
  9. 2
      pages/mine/index.vue
  10. 63
      pages/order-make/index.vue
  11. 2
      pages/paper-details/index.vue
  12. 53
      pages/test/index.vue
  13. 22
      store/index.js
  14. 16
      utils/http/index.js
  15. 229
      utils/md5.js

18
apis/cartApi.js

@ -1,4 +1,3 @@
import http from '../utils/http/index.js'
// 获取购物车列表
export function getShoppingCarList(data) {
@ -14,19 +13,20 @@ export function getShoppingCarList(data) {
}
// 移除购物车
export function removeShoppingCar(data) {
return http.post(
{
url: '/base-paper-trading/delete/shopping-car',
data
}
)
return http.post({
url: '/base-paper-trading/delete/shopping-car',
data
})
}
// 购物车结算
// 购物车结算
export function closePaperReserve(data) {
return http.post(
{
url: '/base-paper-trading/shopping/trolley/buyer/paper/reserve',
data
},
{
isEncrypt: true
}
)
}
}

55
apis/commonApi.js

@ -37,6 +37,12 @@ function syncStore(res) {
isVip = true
}
}
store.commit('setUserInfo', {
name: companyInfo.employeeName,
userId: res.userId,
mobile: res.mobile,
avatar: null
})
store.commit('setCompanyInfo', {
id: companyInfo.id,
name: companyInfo.name,
@ -44,12 +50,6 @@ function syncStore(res) {
isVip: isVip,
vipExpireTime: vipExpireTime
})
store.commit('setUserInfo', {
name: companyInfo.employeeName,
userId: res.userId,
mobile: res.mobile,
avatar: null
})
} else {
if (res) {
store.commit('setUserInfo', {
@ -74,15 +74,17 @@ export function getBaseInfo(data = {}, refresh = false) {
if (!refresh && baseInfo) {
resolve(baseInfo)
} else {
http.get({ url: '/yyt-uec/get/base-info', data }, { hideLoading: true }).then((res) => {
if (res) {
baseInfo = res
syncStore(res)
resolve(res)
} else {
resolve(null)
}
})
http
.get({ url: '/yyt-uec/get/base-info', data }, { hideLoading: true })
.then((res) => {
if (res) {
baseInfo = res
syncStore(res)
resolve(res)
} else {
resolve(null)
}
})
}
})
}
@ -93,7 +95,9 @@ export function getBaseInfo(data = {}, refresh = false) {
*/
export function getVerifyUrl(data = {}) {
return http.post({
url: '/yyt-uec/get/fdd-enterprise-verify-url?enterpriseId=' + data.enterpriseId,
url:
'/yyt-uec/get/fdd-enterprise-verify-url?enterpriseId=' +
data.enterpriseId,
data
})
}
@ -104,7 +108,9 @@ export function getVerifyUrl(data = {}) {
*/
export function getGuaranteeContract(data = {}) {
return http.post({
url: '/yyt-uec/create/supplier/guarantee-contract?mallSupplierId=' + data.mallSupplierId,
url:
'/yyt-uec/create/supplier/guarantee-contract?mallSupplierId=' +
data.mallSupplierId,
data
})
}
@ -218,3 +224,18 @@ export function getOpenId(data = {}) {
data: data
})
}
/**
* 绑定纸盘商销售id
* @param {object} data
* @value {string} customerEnterpriseId 客户企业id
* @value {string} customerId 客户id
* @value {string} sellerId 纸盘商销售id
* @value {string} sellerSupplierId 纸盘商id
*/
export function bindUser(data = {}) {
return http.post({
url: '/yyt-uec/seller/bound/customer',
data: data
})
}

7
apis/enquiryListApi.js

@ -14,13 +14,16 @@ export function getEnquiryOrder(data) {
/**
* 询价单去下单
* swagger:https://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%8E%9F%E7%BA%B8%E8%AE%A2%E5%8D%95/createCustomerOrderByEnquiryUsingPOST
*
*
*/
export function createByEnquiry(data) {
return http.post(
{
url: '/base-paper-trading/buyer/paper/goods/reserve/by-enquiry',
data
},
{
isEncrypt: true
}
)
}
}

27
apis/orderApi.js

@ -43,10 +43,15 @@ export const getDefaultAddress = (data) => {
* @returns {Promise<object>}
*/
export const submitClientOrder = (data) => {
return http.post({
url: '/base-paper-trading/customer/submit/order',
data
})
return http.post(
{
url: '/base-paper-trading/customer/submit/order',
data
},
{
isEncrypt: true
}
)
}
/**
@ -98,7 +103,7 @@ export function clientDeleteVoucher(data) {
}
/**
* 客户确认舒活
* 客户确认收货
* @param {object} data supplierOrderId
* @returns {Promise<Object>}
*/
@ -108,3 +113,15 @@ export function clientConfirmOrder(data) {
data
})
}
/**
* 计算不开票价格
* @param {object} data customerOrderId
* @returns {Promise<Object>}
*/
export function calcNotInvoiceOrderInfo(data) {
return http.get({
url: '/base-paper-trading/get/free/checking/order/calculate',
data
})
}

13
apis/paperDetailsApi.js

@ -17,10 +17,13 @@ export const getPaperDetail = (data = {}) => {
* swagger:https://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/
*/
export const createGoodsReserve = (data = {}) => {
return http.post({
url: '/base-paper-trading/buyer/paper/goods/reserve',
data
})
return http.post(
{
url: '/base-paper-trading/buyer/paper/goods/reserve',
data
},
{ isEncrypt: true }
)
}
/**
* 加入购物车
@ -31,4 +34,4 @@ export const createShoppingCar = (data = {}) => {
url: '/base-paper-trading/add/shopping-car',
data
})
}
}

40
apis/testApi.js

@ -1,40 +0,0 @@
import http from '../utils/http/index.js'
/**
* 获取店铺纸品列表
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%95%86%E5%93%81%E7%AE%A1%E7%90%86/getStoreProductListForCustomerUsingGET
*/
export const getPaperList = (data = {}) => {
return http.get({
url: '/base-paper-trading/get/store/product-list/for/customer',
data
})
}
/**
* 获取店铺纸品详情
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%95%86%E5%93%81%E7%AE%A1%E7%90%86/getProductDetailForCustomerUsingGET
*/
export const getPaperDetail = (data = {}) => {
return http.get({
url: '/base-paper-trading/get/product-detail/for/customer',
data
})
}
/**
* 立即订购
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%8E%9F%E7%BA%B8%E8%AE%A2%E5%8D%95/buyerPaperGoodsReserveUsingPOST
*/
export const purchasePaper = (data = {}) => {
return http.post({
url: '/base-paper-trading/buyer/paper/goods/reserve',
data
})
}

17
enums/index.js

@ -21,6 +21,14 @@ export const accountType = {
CUSTOM: 5
}
/**
* 加密类型 1:md5加密 2:sha256加密
*/
export const encryptType = {
MD5: 1,
SHA256: 2
}
/**
* 验证码用途
*/
@ -217,3 +225,12 @@ export const paymentMethodMap = {
[paymentMethodEnum.MONTHLY_PAY]: '月结支付',
[paymentMethodEnum.FLY_PAY]: '飞算支付'
}
/**
* 订单是否开票 0:开票 1:不开票
* 默认开票
*/
export const invoiceStatusEnum = {
INVOICE: 0,
NO_INVOICE: 1
}

8
pages.json

@ -108,14 +108,6 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/test/index",
"style": {
"navigationBarTitleText": "测试页面",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/paper-details/index",
"style": {

2
pages/mine/index.vue

@ -19,7 +19,7 @@
<image v-if="userInfo.fddEnterpriseStatus === fddStatus.CERTIFIED_SUCCESS" class="image" src="/static/imgs/mine/certified-icon.png"></image>
<image v-else class="image" @click="certifyCompany()" src="/static/imgs/mine/non-certified-icon.png"></image>
</view>
<view style="margin-top: 10rpx">
<view style="margin-top: 16rpx">
<text
style="font-size: 26rpx; color: #fff; font-weight: 400; word-break: break-all"
@click="loginGo2(hasCompany ? 'enterprise-info-edit' : 'enterprise-info')"

63
pages/order-make/index.vue

@ -72,6 +72,20 @@
</view>
</view>
</view>
<!-- 是否开票 -->
<view class="tax-area flex-row-center-space">
<text class="text">是否开票:</text>
<view style="width: 350rpx" class="flex-row-center-space">
<view class="flex-row-center-space" @click="selectInvoice(true)">
<image class="switch-icon" :src="isInvoice ? '/static/imgs/order/selected-icon.png' : '/static/imgs/order/select-icon.png'"></image>
<text class="text">开票</text>
</view>
<view class="flex-row-center-space" @click="selectInvoice(false)">
<image class="switch-icon" :src="!isInvoice ? '/static/imgs/order/selected-icon.png' : '/static/imgs/order/select-icon.png'"></image>
<text class="text">不开票</text>
</view>
</view>
</view>
<!-- 送货时间 -->
<view class="timer-area">
<text style="font-size: 30rpx; color: #000000">送货时间:</text>
@ -128,9 +142,10 @@
<script>
import { go2, back, getCache } from '@/utils/hook.js'
import { getPreOrderInfo, getDefaultAddress, submitClientOrder } from '@/apis/orderApi'
import { getPreOrderInfo, getDefaultAddress, submitClientOrder, calcNotInvoiceOrderInfo } from '@/apis/orderApi'
import { getFsCredit, getMonthCredit } from '@/apis/commonApi'
import { isObject } from '@/utils/is'
import { invoiceStatusEnum } from '@/enums/index'
export default {
data() {
@ -139,6 +154,8 @@ export default {
customerEnterpriseName: '',
receivedTime: null
},
invoiceInfo: {}, //
noInvoiceInfo: null, //
deliveryAddress: {},
currentPayType: null,
payMap: {
@ -151,7 +168,8 @@ export default {
value: 4
}
},
loading: false
loading: false,
isInvoice: true //
}
},
onLoad(option) {
@ -161,6 +179,7 @@ export default {
}).then((res) => {
if (res) {
this.orderInfo = res
this.invoiceInfo = res
}
})
} else {
@ -191,6 +210,28 @@ export default {
selectPayMethod(type) {
this.currentPayType = type
},
selectInvoice(type) {
this.isInvoice = type
if (!type) {
//
if (this.noInvoiceInfo) {
this.orderInfo = this.noInvoiceInfo
} else {
//
calcNotInvoiceOrderInfo({
customerOrderId: this.orderInfo.orderId,
isPayTaxes: invoiceStatusEnum.NO_INVOICE // 1:
}).then((res) => {
if (res) {
this.noInvoiceInfo = res
this.orderInfo = res
}
})
}
} else {
this.orderInfo = this.invoiceInfo
}
},
submitOrder() {
if (this.currentPayType == null) {
uni.showToast({
@ -377,6 +418,24 @@ export default {
justify-content: space-between;
text-align: right;
}
.tax-area {
margin-top: 20rpx;
width: 750rpx;
padding: 0rpx 32rpx;
height: 88rpx;
background-color: #fff;
.text {
font-size: 30rpx;
color: #000000;
}
.switch-icon {
width: 40rpx;
height: 40rpx;
margin-right: 16rpx;
}
}
.pay-area {
background-color: #fff;
margin-top: 20rpx;

2
pages/paper-details/index.vue

@ -5,7 +5,7 @@
<uni-swiper-dot :info="info.imgList" :current="current" field="content" mode="indexes" style="height: 100%">
<swiper class="swiper-box" @change="swiperChange" style="height: 100%">
<swiper-item v-for="(item, index) in info.imgList" :key="index">
<view class="" @tap="previewImg(item, info.imgList)">
<view class="" @tap="previewImg(index, info.imgList)">
<image class="image" :src="item || 'https://qncloud.oss-cn-shenzhen.aliyuncs.com/paper_shopkeeper/paper-default.png'" mode=""></image>
</view>
</swiper-item>

53
pages/test/index.vue

@ -1,53 +0,0 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="测试"></uni-nav-bar>
<view @click="getList">list</view>
<view @click="getDetail">detail</view>
<view @click="purchase">purchase</view>
</view>
</template>
<script>
import { go2, back } from '@/utils/hook.js'
import { getPaperList, getPaperDetail, purchasePaper } from '@/apis/testApi.js'
export default {
data() {
return {}
},
methods: {
go2,
back,
//
getList() {
getPaperList({ supplierId: this.$store.state.supplierId }).then((res) => {
console.log(res)
})
},
getDetail() {
getPaperDetail({ productId: '678972506887032832' })
},
purchase() {
let form = {
orderGoodsList: [
{
buyTon: 0.1,
gramWeight: 200,
length: 1000,
mallSupplierId: '677166944742412288',
pieceQuantity: 500,
productId: '678972506887032832',
productSkuId: '678972507222577152',
unitPrice: 10000,
width: 1000
}
],
otherFee: 0,
purchaserEnterpriseId: '807704'
}
purchasePaper(form).then((res) => {
console.log(res)
})
}
}
}
</script>

22
store/index.js

@ -1,6 +1,7 @@
import Vue from 'vue'
import Vuex from 'vuex'
import { isObject, isArray } from '@/utils/is'
import { bindUser } from '@/apis/commonApi'
let qnToken = null,
/**
@ -33,7 +34,7 @@ const companyInfoParams = [
'name',
'fddEnterpriseStatus',
'isVip',
'vipExpireTime',
'vipExpireTime'
]
const userInfoParams = ['name', 'userId', 'mobile', 'avatar']
try {
@ -68,7 +69,7 @@ const store = new Vuex.Store({
companyInfo: companyInfo || {}, // 印包厂信息
nextPage: {
name: '',
data: {},
data: {}
},
searchHistory: searchHistory || [],
/**
@ -76,8 +77,8 @@ const store = new Vuex.Store({
*/
cache: {
type: 'none',
data: null,
},
data: null
}
},
mutations: {
setCache(state, { type, data }) {
@ -185,6 +186,13 @@ const store = new Vuex.Store({
try {
uni.setStorageSync('companyInfo', JSON.stringify(companyInfo))
state.companyInfo = companyInfo
// 绑定供应商销售账号
bindUser({
customerEnterpriseId: companyInfo.id,
sellerId: state.userId,
sellerSupplierId: state.supplierId,
customerId: state.userId
})
} catch (e) {
console.error('设置companyInfo失败:', e)
}
@ -285,7 +293,7 @@ const store = new Vuex.Store({
} catch (e) {
console.error('删除userId失败:', e)
}
},
}
},
actions: {
logout({ commit }) {
@ -305,7 +313,7 @@ const store = new Vuex.Store({
arr = arr.slice(0, 10)
}
commit('setSearchHistory', arr)
},
},
}
}
})
export default store

16
utils/http/index.js

@ -1,6 +1,7 @@
import Http from './http.js'
import env from '@/env/index.js'
import { XAPPID } from '@/enums/index.js'
import { md5 } from '@/utils/md5.js'
import { XAPPID, encryptType } from '@/enums/index.js'
// 请求封装文件
const urlEnv = env === 'production' ? '' : `-${env}`
@ -28,7 +29,9 @@ const config = {
// 是否返回原始数据
isReturnNativeResponse: false,
// 需要对返回数据进行处理
isTransformResponse: true
isTransformResponse: true,
// 是否加密
isEncrypt: false
}
}
@ -74,6 +77,15 @@ const reqInterceptor = (config, options) => {
title: '加载中...'
})
}
if (options.isEncrypt) {
let data = config.data
const signStr = JSON.stringify(data)
const signStrMore = `&Authorization=${token}&X-APP-ID=${XAPPID}`
const sign = md5(JSON.stringify(data) + signStrMore)
data.sign = sign
data.signStr = signStr
data.signType = encryptType.MD5
}
return config
}

229
utils/md5.js

@ -0,0 +1,229 @@
export function md5(string) {
function RotateLeft(lValue, iShiftBits) {
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits))
}
function AddUnsigned(lX, lY) {
let lX4, lY4, lX8, lY8, lResult
lX8 = lX & 0x80000000
lY8 = lY & 0x80000000
lX4 = lX & 0x40000000
lY4 = lY & 0x40000000
lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff)
if (lX4 & lY4) {
return lResult ^ 0x80000000 ^ lX8 ^ lY8
}
if (lX4 | lY4) {
if (lResult & 0x40000000) {
return lResult ^ 0xc0000000 ^ lX8 ^ lY8
} else {
return lResult ^ 0x40000000 ^ lX8 ^ lY8
}
} else {
return lResult ^ lX8 ^ lY8
}
}
function F(x, y, z) {
return (x & y) | (~x & z)
}
function G(x, y, z) {
return (x & z) | (y & ~z)
}
function H(x, y, z) {
return x ^ y ^ z
}
function I(x, y, z) {
return y ^ (x | ~z)
}
function FF(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac))
return AddUnsigned(RotateLeft(a, s), b)
}
function GG(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac))
return AddUnsigned(RotateLeft(a, s), b)
}
function HH(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac))
return AddUnsigned(RotateLeft(a, s), b)
}
function II(a, b, c, d, x, s, ac) {
a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac))
return AddUnsigned(RotateLeft(a, s), b)
}
function ConvertToWordArray(string) {
let lWordCount
let lMessageLength = string.length
let lNumberOfWords_temp1 = lMessageLength + 8
let lNumberOfWords_temp2 =
(lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64
let lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16
let lWordArray = Array(lNumberOfWords - 1)
let lBytePosition = 0
let lByteCount = 0
while (lByteCount < lMessageLength) {
lWordCount = (lByteCount - (lByteCount % 4)) / 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] =
lWordArray[lWordCount] |
(string.charCodeAt(lByteCount) << lBytePosition)
lByteCount++
}
lWordCount = (lByteCount - (lByteCount % 4)) / 4
lBytePosition = (lByteCount % 4) * 8
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition)
lWordArray[lNumberOfWords - 2] = lMessageLength << 3
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29
return lWordArray
}
function WordToHex(lValue) {
let WordToHexValue = '',
WordToHexValue_temp = '',
lByte,
lCount
for (lCount = 0; lCount <= 3; lCount++) {
lByte = (lValue >>> (lCount * 8)) & 255
WordToHexValue_temp = '0' + lByte.toString(16)
WordToHexValue =
WordToHexValue +
WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2)
}
return WordToHexValue
}
function Utf8Encode(string) {
string = string.replace(/\r\n/g, '\n')
let utftext = ''
for (let n = 0; n < string.length; n++) {
let c = string.charCodeAt(n)
if (c < 128) {
utftext += String.fromCharCode(c)
} else if (c > 127 && c < 2048) {
utftext += String.fromCharCode((c >> 6) | 192)
utftext += String.fromCharCode((c & 63) | 128)
} else {
utftext += String.fromCharCode((c >> 12) | 224)
utftext += String.fromCharCode(((c >> 6) & 63) | 128)
utftext += String.fromCharCode((c & 63) | 128)
}
}
return utftext
}
let x = Array()
let k, AA, BB, CC, DD, a, b, c, d
let S11 = 7,
S12 = 12,
S13 = 17,
S14 = 22
let S21 = 5,
S22 = 9,
S23 = 14,
S24 = 20
let S31 = 4,
S32 = 11,
S33 = 16,
S34 = 23
let S41 = 6,
S42 = 10,
S43 = 15,
S44 = 21
string = Utf8Encode(string)
x = ConvertToWordArray(string)
a = 0x67452301
b = 0xefcdab89
c = 0x98badcfe
d = 0x10325476
for (k = 0; k < x.length; k += 16) {
AA = a
BB = b
CC = c
DD = d
a = FF(a, b, c, d, x[k + 0], S11, 0xd76aa478)
d = FF(d, a, b, c, x[k + 1], S12, 0xe8c7b756)
c = FF(c, d, a, b, x[k + 2], S13, 0x242070db)
b = FF(b, c, d, a, x[k + 3], S14, 0xc1bdceee)
a = FF(a, b, c, d, x[k + 4], S11, 0xf57c0faf)
d = FF(d, a, b, c, x[k + 5], S12, 0x4787c62a)
c = FF(c, d, a, b, x[k + 6], S13, 0xa8304613)
b = FF(b, c, d, a, x[k + 7], S14, 0xfd469501)
a = FF(a, b, c, d, x[k + 8], S11, 0x698098d8)
d = FF(d, a, b, c, x[k + 9], S12, 0x8b44f7af)
c = FF(c, d, a, b, x[k + 10], S13, 0xffff5bb1)
b = FF(b, c, d, a, x[k + 11], S14, 0x895cd7be)
a = FF(a, b, c, d, x[k + 12], S11, 0x6b901122)
d = FF(d, a, b, c, x[k + 13], S12, 0xfd987193)
c = FF(c, d, a, b, x[k + 14], S13, 0xa679438e)
b = FF(b, c, d, a, x[k + 15], S14, 0x49b40821)
a = GG(a, b, c, d, x[k + 1], S21, 0xf61e2562)
d = GG(d, a, b, c, x[k + 6], S22, 0xc040b340)
c = GG(c, d, a, b, x[k + 11], S23, 0x265e5a51)
b = GG(b, c, d, a, x[k + 0], S24, 0xe9b6c7aa)
a = GG(a, b, c, d, x[k + 5], S21, 0xd62f105d)
d = GG(d, a, b, c, x[k + 10], S22, 0x2441453)
c = GG(c, d, a, b, x[k + 15], S23, 0xd8a1e681)
b = GG(b, c, d, a, x[k + 4], S24, 0xe7d3fbc8)
a = GG(a, b, c, d, x[k + 9], S21, 0x21e1cde6)
d = GG(d, a, b, c, x[k + 14], S22, 0xc33707d6)
c = GG(c, d, a, b, x[k + 3], S23, 0xf4d50d87)
b = GG(b, c, d, a, x[k + 8], S24, 0x455a14ed)
a = GG(a, b, c, d, x[k + 13], S21, 0xa9e3e905)
d = GG(d, a, b, c, x[k + 2], S22, 0xfcefa3f8)
c = GG(c, d, a, b, x[k + 7], S23, 0x676f02d9)
b = GG(b, c, d, a, x[k + 12], S24, 0x8d2a4c8a)
a = HH(a, b, c, d, x[k + 5], S31, 0xfffa3942)
d = HH(d, a, b, c, x[k + 8], S32, 0x8771f681)
c = HH(c, d, a, b, x[k + 11], S33, 0x6d9d6122)
b = HH(b, c, d, a, x[k + 14], S34, 0xfde5380c)
a = HH(a, b, c, d, x[k + 1], S31, 0xa4beea44)
d = HH(d, a, b, c, x[k + 4], S32, 0x4bdecfa9)
c = HH(c, d, a, b, x[k + 7], S33, 0xf6bb4b60)
b = HH(b, c, d, a, x[k + 10], S34, 0xbebfbc70)
a = HH(a, b, c, d, x[k + 13], S31, 0x289b7ec6)
d = HH(d, a, b, c, x[k + 0], S32, 0xeaa127fa)
c = HH(c, d, a, b, x[k + 3], S33, 0xd4ef3085)
b = HH(b, c, d, a, x[k + 6], S34, 0x4881d05)
a = HH(a, b, c, d, x[k + 9], S31, 0xd9d4d039)
d = HH(d, a, b, c, x[k + 12], S32, 0xe6db99e5)
c = HH(c, d, a, b, x[k + 15], S33, 0x1fa27cf8)
b = HH(b, c, d, a, x[k + 2], S34, 0xc4ac5665)
a = II(a, b, c, d, x[k + 0], S41, 0xf4292244)
d = II(d, a, b, c, x[k + 7], S42, 0x432aff97)
c = II(c, d, a, b, x[k + 14], S43, 0xab9423a7)
b = II(b, c, d, a, x[k + 5], S44, 0xfc93a039)
a = II(a, b, c, d, x[k + 12], S41, 0x655b59c3)
d = II(d, a, b, c, x[k + 3], S42, 0x8f0ccc92)
c = II(c, d, a, b, x[k + 10], S43, 0xffeff47d)
b = II(b, c, d, a, x[k + 1], S44, 0x85845dd1)
a = II(a, b, c, d, x[k + 8], S41, 0x6fa87e4f)
d = II(d, a, b, c, x[k + 15], S42, 0xfe2ce6e0)
c = II(c, d, a, b, x[k + 6], S43, 0xa3014314)
b = II(b, c, d, a, x[k + 13], S44, 0x4e0811a1)
a = II(a, b, c, d, x[k + 4], S41, 0xf7537e82)
d = II(d, a, b, c, x[k + 11], S42, 0xbd3af235)
c = II(c, d, a, b, x[k + 2], S43, 0x2ad7d2bb)
b = II(b, c, d, a, x[k + 9], S44, 0xeb86d391)
a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = AddUnsigned(c, CC)
d = AddUnsigned(d, DD)
}
let temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d)
return temp.toLowerCase()
}
Loading…
Cancel
Save