| // Copyright 2016 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build !purego |
| |
| #include "textflag.h" |
| |
| // func cryptBlocks(c code, key, dst, src *byte, length int) |
| TEXT ·cryptBlocks(SB),NOSPLIT,$0-40 |
| MOVD key+8(FP), R1 |
| MOVD dst+16(FP), R2 |
| MOVD src+24(FP), R4 |
| MOVD length+32(FP), R5 |
| MOVD c+0(FP), R0 |
| loop: |
| KM R2, R4 // cipher message (KM) |
| BVS loop // branch back if interrupted |
| XOR R0, R0 |
| RET |
| |
| // func cryptBlocksChain(c code, iv, key, dst, src *byte, length int) |
| TEXT ·cryptBlocksChain(SB),NOSPLIT,$48-48 |
| LA params-48(SP), R1 |
| MOVD iv+8(FP), R8 |
| MOVD key+16(FP), R9 |
| MVC $16, 0(R8), 0(R1) // move iv into params |
| MVC $32, 0(R9), 16(R1) // move key into params |
| MOVD dst+24(FP), R2 |
| MOVD src+32(FP), R4 |
| MOVD length+40(FP), R5 |
| MOVD c+0(FP), R0 |
| loop: |
| KMC R2, R4 // cipher message with chaining (KMC) |
| BVS loop // branch back if interrupted |
| XOR R0, R0 |
| MVC $16, 0(R1), 0(R8) // update iv |
| RET |
| |