第一部分 算术与数论:C实现 2
第1章 绪论 2
第2章 数的格式:C中大数的表示 7
第3章 接口语义 10
第4章 基本运算 12
4.1 加法和减法 12
4.2 乘法 19
4.2.1 小学乘法方法 20
4.2.2 更快的平方运算 24
4.2.3 Karatsuba能否做得更好 27
4.3 带余除法 30
第5章 模算术:剩余类计算 40
第6章 百川归海:模幂运算 48
6.1 第一种方法 48
6.2 M进制取幂 52
6.3 加法链及窗口 61
6.4 Montgomery约简和取幂 64
6.5 取幂运算的密码学应用 72
第7章 位运算与逻辑函数 77
7.1 移位运算 77
7.2 有或无:位关系 81
7.3 对单个二进制数字的直接访问 85
7.4 比较运算符 87
第8章 输入、输出、赋值和转换 91
第9章 动态寄存器 98
第10章 基本数论函数 104
10.1 最大公约数 104
10.2 剩余类环中的乘法逆 109
10.3 根与对数 114
10.4 剩余类环中的平方根 120
10.4.1 Jacobi符号 120
10.4.2 模pk的平方根 125
10.4.3 模n的平方根 128
10.4.4 基于二次剩余的密码学 133
10.5 素性检验 135
第11章 Rijndael:数据加密标准的后继者 151
11.1 多项式运算 152
11.2 Rijndael算法 155
11.3 计算轮密钥 157
11.4 S盒 158
11.5 行移位变换 160
11.6 列混合变换 160
11.7 轮密钥加 161
11.8 一个完整的加密过程 161
11.9 解密 164
11.10 性能 166
11.11 运行模式 166
第12章 大随机数 167
12.1 一个简单的随机数生成器 169
12.2 密码学的随机数生成器 171
12.2.1 初始值的生成 172
12.2.2 BBS随机数生成器 175
12.2.3 AES生成器 178
12.2.4 RMDSHA-1生成器 181
12.3 质量测试 183
12.3.1 卡方检验 183
12.3.2 单位检验 184
12.3.3 扑克检验 184
12.3.4 游程检验 184
12.3.5 长游程检验 185
12.3.6 自相关检验 185
12.3.7 FLINT/CLINT随机数生成器的质量 185
12.4 更复杂的函数 186
第13章 测试LINT的策略 194
13.1 静态分析 195
13.2 运行时测试 196
第二部分 算术:C++实现与LINT类 202
第14章 用C++精简生活 202
14.1 非公共事务:LINT中数的表示 205
14.2 构造函数 206
14.3 重载运算符 208
第15章 LINT公共接口:成员函数和友元函数 213
15.1 算术 213
15.2 数论 219
15.3 LINT对象的I/O流 222
15.3.1 LINT对象的格式化输出 223
15.3.2 操纵器 228
15.3.3 LINT对象的文件I/O 230
第16章 错误处理 233
16.1 杜绝慌乱 233
16.2 用户定义的错误处理 234
16.3 LINT异常 235
第17章 一个应用实例:RSA密码体制 239
17.1 非对称密码体制 239
17.2 RSA算法 240
17.3 RSA数字签名 250
17.4 C++的RSA类 255
第18章 自己动手测试LINT 263
第19章 更进一步的扩展方法 265
第三部分 附录 268
附录A C函数目录 268
附录B C++函数目录 275
附录C 宏 286
附录D 计算时间 290
附录E 符号 292
附录F 运算和数论软件包 293
参考文献 295