Website of Chuck Easttom, Ph.D., D.Sc.



If you are aware of any errors in any books, please let me know:  Dr. Easttom ,I found an error!  Despite the best efforts of myself, technical editors, copy editors, publishers, etc. Typos' and even occasionally a substantive error do creep in.  I keep a list here.
  Now as you can see below I do acknowledge and post errors.  In fact, I am grateful to readers who send me errors. However, sometimes people email me with an error and it does turn out to be a misunderstanding on their part, or simply something they would prefer to have been worded differently. As I get a large volume of email, please only send actual errors that you are relatively sure are indeed errors.  Thank you


Quantum Computing Fundamentals 1st Edition
Thanks to a reader who found a typo on page 12. The answer to the matrix multiplication should read:
4 8
7 9
NOT
6 8
7 9


Page 11 the answer to the addition examole in 1.3.1 should be:
5 5
3 5
NOT
5 5
5 3

pag 13, the product of two matrices should be:
3 7
7 18
NOT
3 7
7 15

Page 19 the decimal point on the cosine calculation was accidentally moved to the left one space. What is printed as 8.7307 should be .87307


Page 21 (5 - ?)(5 - ?) - 18 should be (5 - ?)(2 - ?) - 18


Page 51 Equation 2.10, the text says "substitute a=2" but then in the equation a=3 (it should be a=2)






Modern Cryptography: Applied Mathematics for Encryption and Information Security
Chapter 1 Page 7 discussing Affine Ciphers has
Attack at dawn
Frrfj0 fr bfxf

This is a typo, It should be
Frrfj0 fr lfxf
  Page 29 has 543 mod 26 as 22 but it should be 23 which would lead to RWK rather than TXM
Chapter 2 The description of the Hill cipher has a misprint. Converting ATTACK AT DAWN to a matrix should yield

1 20 20
1 3 11
1 20 4
1 23 14

NOT
   1  20  20
   1   3  11
  11   1  20
   4   1  23
   4
Chapter 2 ADFGX and ADFGVX Ciphers, the shifting of columns for FALCON should yield
 A C F L N O
-----------
F D A A D A
F F A G X D
F D A A A D
F G A X X F

NOT

 A C F L N O
-----------
F D A A D A
F F A G X D
F D A A A D
C G A X X F

Note the last letter of the column under A is misprinted as C rather than F

Chapter 4 Fermat Prime is formatted wrong. It should be 2^ 2n (2 raised to the 2n power) + 1
Chapter 4 It should be a should be 14 not a 12 on page 99
Chapter 4 Page 96,  is missing an 'e'
Page 112  Page 112 has Galois living from 1811 to 1932 which would have made him 121 years old. Obviously that is a typo (though Galois might have liked it had that been true!) That should be 1811 to 1832

Chapter 4, page 83 The truth table is incorrect on row three. Row three should have an F as the result, not a T
Chapter 5 question 4 should be A ring not C group

Note on the Birthday Paradox.  In the book I describe the birthday paradox and use DES as an example.  This has generated some negative comments, and frankly one individual has become obsessive on Amazon.com and other sites on this issue.  Allow me to state for the record:
1. The Birthday paradox in the form described in the text is applicable to hash collisions, not symmetric ciphers.  I was giving a simplified example.  As the book states several times, the math is simplified so those without a math background can understand.  In this case it may have been over simplified. It is an unfortunate fact that sometimes when over simplifying something, one can go too far.  And in this case that occurred.  To be more direct: the description of the birthday paradox given in the book is accurate and detailed, however the application to DES is inaccurate.  The birthday paradox is usually applied to hash collisions. Yes the birthday paradox can be applied to symmetric ciphers (as noted below) but not in the basic form presented in the book.

2. However, there are variations of the birthday paradox that are applicable to symmetric ciphers.  One example is Using collisions (i.e. birthday paradox) in conjunction with other methods to attack AES.
https://www.iacr.org/archive/ches2004/31560162/31560162.pdf

There are other papers that use the birthday paradox to modify an attack on a symmetric cipher (not this is not using the birthday paradox in the same way it is used in finding a hash collision, but it is using it as part of an attack on a symmetric cipher):
Kelsey, J., Schneier, B., & Wagner, D. (1997, November). Related-key cryptanalysis of 3-way, biham-des, cast, des-x, newdes, rc2, and tea. In International Conference on Information and Communications Security (pp. 233-246). Springer Berlin Heidelberg.
This paper discusses Bihams key rotation attack. This paper also has the following quote "Typically, in related-key cryptanalysis, we search for a partnered plaintext pair by the birthday paradox, and the right choice leads to a recognizable match in the corresponding ciphertexts with probability 1. "

Biryukov, A., & Shamir, A. (2000, December). Cryptanalytic time/memory/data tradeoffs for stream ciphers. In International Conference on the Theory and Application of Cryptology and Information Security (pp. 1-13). Springer, Berlin, Heidelberg.
Vaudenay, S. (2002, May). Security flaws induced by CBC padding-applications to SSL, IPSEC, WTLS. In EUROCRYPT (Vol. 2332, pp. 534-546).
Adams, C. M. (1997). Constructing symmetric ciphers using the CAST design procedure. Designs, Codes and cryptography, 12(3), 283-316.





C++ Programming Fundamentals
chapter 2 Image 2.7 is wrong. It should be
Chapter 3

In Chapter 3, page 9, you talk about String Properties and Methods, and the C-style string function that are still used frequently.  In Example 3.8,

That line should be

strcat(firststring,secondstring)

then of course

cout << "Both strings you entered are " << firststring<< "\n";

What happens with strcat is the second string is appended to the first. There is no need for a third string.


Learn VB.Net 1st Edition
Chapter 1 and 2
  • The example for the calculator refers to a control array, these are no longer supported in VB.Net, just use single controls.
  • The calculations for the math have an error in the select case statement. All cases say to add. Each case should do the appropriate math.
Chapter 5 The database example (5.1) works fine up to the point where you fill in the code for the buttons. The appropriate code for the form load, and all click events is shown here:
Public Class Form1
Inherits System.Windows.Forms.Form
Dim dbindingmanager As BindingManagerBase

#Region " Windows Form Designer generated code "

#End Region

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' This code is needed to fill in the data set
' with data from the underlying database.
OleDbDataAdapter1.Fill(DataSet11)

' set the binding manager
dbindingmanager = Me.BindingContext(DataSet11, "students")

End Sub

Private Sub btnnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnnext.Click
dbindingmanager.Position += 1
End Sub

Private Sub btnprevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnprevious.Click
dbindingmanager.Position -= 1
End Sub
End Class
Private Sub btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnadd.Click
dbindingmanager.AddNew()

End Sub

Private Sub btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.Click
dbindingmanager.RemoveAt(dbindingmanager.Position)

End Sub

Private Sub btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnupdate.Click
' you must stop editing before updating
dbindingmanager.EndCurrentEdit()

'Update from the dataset
OleDbDataAdapter1.Update(DataSet11.students)
'clear and refill dataset
DataSet11.Clear()
OleDbDataAdapter1.Fill(DataSet11)
End Sub


Advanced Java Script 2nd Edition

  1. In this book I discuss the 'Live Payment' (on page 13)product being used by Netscape. Netscape has discontinued this product.
    The link to their statement on this issue is provided here
    Live Payment
  2. On page 53 I erroniously state that their is no switch statement in JavaScript but it may
    be included at a later date. It has already been included.
  3. On page 53 the code says
    var number = prompt("Enter a number:", 0)
    alert(number, " is a ", typeof number) // "... is a string"
    number = parseInt(number)
    alert(number, " is a ", typeof number) // "... is a number"
    It should say
    var number = prompt("Enter a number:", 0)
    alert(number + " is a " + typeof(number)) // "... is a string"
    number = parseInt(number)
    alert(number + " is a " + typeof(number)) // "... is a number"