流密码。豫
yuyan · 205 行 · 11774 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
「:
文言:流密码者,夏夏之二十轮也。以三二字为词,加法则化整而模二之三十二次幂,旋左以旋右代(旋左 n 即旋右 32 减 n),异或逐位而行。季轮旋量为一六、一二、八、七。
汉语:ChaCha20 块函数(RFC 7539 / RFC 8439 §2.3)。十六个三十二位词,以『0』『1』字符串表(首字为最高位),复用散列摘要之 整转字/字转整/字加/位异或/字旋右 及 列 诸辅助。季轮(quarter round)旋量为 16、12、8、7(RFC §2.1)。纯豫言,不假外库。
:」
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「整数操作」之书。
寻观「标准库」之「数据结构」之「字符串术」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「终端浏览器」之「散列摘要」之书。
「:文言:取一字。汉语:字节串自零起第 pos 字节;越界则零。:」
「取一字」乃化「字节串」而化「整数」而「整数」也。
「取一字」者会「bs」而会「pos」而
若「小于」于「pos」于(「字节串长度」于「bs」)
则「字节串取字节」于「bs」于「pos」
否则「零」
也。
「:文言:取四字。汉语:自字节串基址读四字(小端);越界补零。:」
「取四字」乃化「字节串」而化「整数」而「整数」也。
「取四字」者会「bs」而会「基」而
虑「b0」者(「取一字」于「bs」于「基」)
而
虑「b1」者(「取一字」于「bs」于(「加」于「基」于「一」))
而
虑「b2」者(「取一字」于「bs」于(「加」于「基」于「二」))
而
虑「b3」者(「取一字」于「bs」于(「加」于「基」于「三」))
而
虑「n0」者(「加」于(「乘」于「b0」于「一」)于(「乘」于「b1」于「二五六」))
而
虑「n1」者(「加」于(「乘」于「b2」于「六五五三六」)于(「乘」于「b3」于「一六七七七二一六」))
而「加」于「n0」于「n1」
也。
「:文言:置第。汉语:列自零起第 i 项换新值。:」
「置第」乃化(「列」于「字符串」)而化「整数」而化「字符串」而(「列」于「字符串」)也。
「置第」者会「列」而会「i」而会「新」而
若「等零」于「i」
则「缀」于「新」于(「尾列」于「列」)
否则
虑「首」者(「首列」于「列」)
而
虑「尾」者(「尾列」于「列」)
而
虑「余」者(「置第」于「尾」于(「减」于「i」于「一」)于「新」)
而「缀」于「首」于「余」
也。
「:文言:季轮。汉语:对四词(位置 i、j、k、l)行一季轮;旋量一六、一二、八、七。:」
「季轮」乃化(「列」于「字符串」)而化「整数」而化「整数」而化「整数」而化「整数」而(「列」于「字符串」)也。
「季轮」者会「st」而会「i」而会「j」而会「k」而会「l」而
虑「a」者(「取第」于「st」于「i」)
而
虑「b」者(「取第」于「st」于「j」)
而
虑「c」者(「取第」于「st」于「k」)
而
虑「d」者(「取第」于「st」于「l」)
而
虑「a1」者(「字加」于「a」于「b」)
而
虑「d1」者(「字旋右」于(「位异或」于「d」于「a1」)于「一六」)
而
虑「c1」者(「字加」于「c」于「d1」)
而
虑「b1」者(「字旋右」于(「位异或」于「b」于「c1」)于「二零」)
而
虑「a2」者(「字加」于「a1」于「b1」)
而
虑「d2」者(「字旋右」于(「位异或」于「d1」于「a2」)于「二四」)
而
虑「c2」者(「字加」于「c1」于「d2」)
而
虑「b2」者(「字旋右」于(「位异或」于「b1」于「c2」)于「二五」)
而
虑「s1」者(「置第」于「st」于「i」于「a2」)
而
虑「s2」者(「置第」于「s1」于「j」于「b2」)
而
虑「s3」者(「置第」于「s2」于「k」于「c2」)
而「置第」于「s3」于「l」于「d2」
也。
「:文言:双轮。汉语:一轮(四列轮)加一轮(四斜轮),共八季轮。:」
「双轮」乃化(「列」于「字符串」)而(「列」于「字符串」)也。
「双轮」者会「st」而
虑「s1」者(「季轮」于「st」于「零」于「四」于「八」于「一二」)
而
虑「s2」者(「季轮」于「s1」于「一」于「五」于「九」于「一三」)
而
虑「s3」者(「季轮」于「s2」于「二」于「六」于「一零」于「一四」)
而
虑「s4」者(「季轮」于「s3」于「三」于「七」于「一一」于「一五」)
而
虑「s5」者(「季轮」于「s4」于「零」于「五」于「一零」于「一五」)
而
虑「s6」者(「季轮」于「s5」于「一」于「六」于「一一」于「一二」)
而
虑「s7」者(「季轮」于「s6」于「二」于「七」于「八」于「一三」)
而「季轮」于「s7」于「三」于「四」于「九」于「一四」
也。
「:文言:轮累。汉语:自始态行 n 双轮(共 2n 轮)。:」
「轮累」乃化(「列」于「字符串」)而化「整数」而(「列」于「字符串」)也。
「轮累」者会「st」而会「n」而
若「等零」于「n」则「st」
否则「轮累」于(「双轮」于「st」)于(「减」于「n」于「一」)
也。
「:文言:加回累。汉语:逐词加原态,自 i 至一六。:」
「加回累」乃化(「列」于「字符串」)而化(「列」于「字符串」)而化「整数」而化(「列」于「字符串」)而(「列」于「字符串」)也。
「加回累」者会「cur」而会「orig」而会「i」而会「acc」而
若「等」于「i」于「一六」则「acc」
否则
虑「ca」者(「取第」于「cur」于「i」)
而
虑「oa」者(「取第」于「orig」于「i」)
而
虑「新词」者(「字加」于「ca」于「oa」)
而「加回累」于「cur」于「orig」于(「加」于「i」于「一」)于(「置第」于「acc」于「i」于「新词」)
也。
「:文言:加回。汉语:工作态加原态(逐词模二之三十二次幂)。:」
「加回」乃化(「列」于「字符串」)而化(「列」于「字符串」)而(「列」于「字符串」)也。
「加回」者会「cur」而会「orig」而「加回累」于「cur」于「orig」于「零」于「orig」也。
「:文言:字转四字。汉语:词(三二字)转小端四字(字节串)。:」
「字转四字」乃化「字符串」而「字节串」也。
「字转四字」者会「w」而
虑「n」者(「字转整」于「w」)
而
虑「b0」者(「减」于「n」于(「乘」于(「除以」于「n」于「二五六」)于「二五六」))
而
虑「m1」者(「除以」于「n」于「二五六」)
而
虑「b1」者(「减」于「m1」于(「乘」于(「除以」于「m1」于「二五六」)于「二五六」))
而
虑「m2」者(「除以」于「m1」于「二五六」)
而
虑「b2」者(「减」于「m2」于(「乘」于(「除以」于「m2」于「二五六」)于「二五六」))
而
虑「m3」者(「除以」于「m2」于「二五六」)
而
虑「b3」者(「减」于「m3」于(「乘」于(「除以」于「m3」于「二五六」)于「二五六」))
而
虑「p1」者(「拼接字节串」于(「单字节串」于「b0」)于(「单字节串」于「b1」))
而
虑「p2」者(「拼接字节串」于(「单字节串」于「b2」)于(「单字节串」于「b3」))
而「拼接字节串」于「p1」于「p2」
也。
「:文言:输出累。汉语:逐词转四字,自 wi 至一六。:」
「输出累」乃化(「列」于「字符串」)而化「整数」而化「字节串」而「字节串」也。
「输出累」者会「st」而会「wi」而会「acc」而
若「等」于「wi」于「一六」则「acc」
否则「输出累」于「st」于(「加」于「wi」于「一」)于(「拼接字节串」于「acc」于(「字转四字」于(「取第」于「st」于「wi」)))
也。
「:文言:建态。汉语:由密钥、计数、非密成十六词态(常、密、计数、非密)。:」
「建态」乃化「字节串」而化「整数」而化「字节串」而(「列」于「字符串」)也。
「建态」者会「key」而会「counter」而会「nonce」而
虑「L1」者(「加末」于「罄」于(「整转字」于「一六三四七六零八零五」))
而
虑「L2」者(「加末」于「L1」于(「整转字」于「八五七七六零八七八」))
而
虑「L3」者(「加末」于「L2」于(「整转字」于「二零三六四七七二三四」))
而
虑「L4」者(「加末」于「L3」于(「整转字」于「一七九七二八五二三六」))
而
虑「L5」者(「加末」于「L4」于(「整转字」于(「取四字」于「key」于「零」)))
而
虑「L6」者(「加末」于「L5」于(「整转字」于(「取四字」于「key」于「四」)))
而
虑「L7」者(「加末」于「L6」于(「整转字」于(「取四字」于「key」于「八」)))
而
虑「L8」者(「加末」于「L7」于(「整转字」于(「取四字」于「key」于「一二」)))
而
虑「L9」者(「加末」于「L8」于(「整转字」于(「取四字」于「key」于「一六」)))
而
虑「L10」者(「加末」于「L9」于(「整转字」于(「取四字」于「key」于「二零」)))
而
虑「L11」者(「加末」于「L10」于(「整转字」于(「取四字」于「key」于「二四」)))
而
虑「L12」者(「加末」于「L11」于(「整转字」于(「取四字」于「key」于「二八」)))
而
虑「L13」者(「加末」于「L12」于(「整转字」于「counter」))
而
虑「L14」者(「加末」于「L13」于(「整转字」于(「取四字」于「nonce」于「零」)))
而
虑「L15」者(「加末」于「L14」于(「整转字」于(「取四字」于「nonce」于「四」)))
而「加末」于「L15」于(「整转字」于(「取四字」于「nonce」于「八」))
也。
「:文言:块。汉语:ChaCha20 块函数(密钥、计数、非密成六四字节)。:」
「块」乃化「字节串」而化「整数」而化「字节串」而「字节串」也。
「块」者会「key」而会「counter」而会「nonce」而
虑「orig」者(「建态」于「key」于「counter」于「nonce」)
而
虑「work」者(「轮累」于「orig」于「一零」)
而
虑「fin」者(「加回」于「work」于「orig」)
而「输出累」于「fin」于「零」于(「空字节串」于「元」)
也。