GCM
כפל פולינומים מעל השדה  GF(2^{128})

בפונקציה GHASH מבוצע כפל מודולרי בשדה הבינארי  \mathbb {F} _{2^{128}} מודולו  2^{128}. כלומר רואים במחרוזות הסיביות 'כמקדמים בינאריים' של פולינומים ממעלה נמוכה מ-128 לפי סדר בתים גדול (כלומר הסיבית הכי המשמעותית מייצגת את המקדם הראשון). לצורך הצמצום המודולרי משתמשים בפולינום פרימיטיבי קבוע  f(\alpha )=\alpha ^{128}+\alpha ^{7}+\alpha ^{2}+\alpha +1 המיוצג על ידי המחרוזת  R=11100001\ \|\ 0^{120} (כלומר הבית הראשון מכיל את 11100001 (0xE1) והיתר אפסים, בסך הכול 128 סיביות או 16 בתים).
בפונקציה מתבצע הכפל של הקבוע  H (שהוא תוצאת הצפנה של מחרוזת אפסים) במשתנה  X הדרך הארוכה לחישוב  X\cdot H אינה יעילה, אפשר לפשט את התהליך על ידי רקורסיה של הכפלות בפולינום  \alpha  המיוצג על ידי האלמנט  P המקביל למחרוזת הבינארית '10' (או בבסיס הקסדצימלי 0x02). פעולה זו שוות ערך לפעולת Shift left, כלומר הזזה של כל הסיביות שמאלה (למעלה) פוזיציה אחת, הסיבית המשמעותית ביותר נפלטת והסיבית הראשונה מתאפסת, הפעולה Shift מובנית בכל המעבדים והיא יעילה. אם הסיבית המשמעותית ביותר של  X (לפני ההזזה) המיוצגת על ידי  X_{127} היא אפס, מתקבל למעשה פולינום ממעלה 127, אחרת התרחשה גלישה ולכן לפי כללי החשבון המודולרי יש צורך לחלק את התוצאה בפולינום הפרימיטיבי  f(\alpha ) ולקחת את השארית. כלומר למצוא  q ו- r המקיימים  \alpha ^{128}+\alpha =q\cdot f+r. קל לפתור את המשוואה עבור המקרה  q=1 כי אז מתקבל  r=\alpha ^{128}+\alpha -f. יוצא שהצמצום המודולרי מקביל למעשה לפעולת חיסור אחת במקדמים הנמוכים של  f. בשדה בינארי פעולת חיבור מתבצעת על כל המקדמים בנפרד מודולו 2 שהיא מקבילה למעשה לפעולת XOR. היות ש-XOR הופכי של עצמו חיסור זהה לחיבור.
בסיכומו של דבר הכפל ב- \alpha  דורש רק הזזת כל סיביות המחרוזת פוזיציה אחת ופעולת XOR מותנית אחת עם הקבוע לעיל. שהן כידוע פעולות מהירות וזולות במונחי מחשוב. מכאן הדרך לביצוע כל כפל ביעילות רבה ברקורסיה. כדי לחשב את  Y\cdot X מייצגים את  Y כחזקות של האלמנט  P, מבצעים רקורסיה  X,X\cdot P,X\cdot P^{2},... כלומר בכל שלב מכפילים את  X ב- P בשיטה המתוארת ואם  Y_{i}=1 מבצעים חיבור אחד נוסף ב-XOR (מלבד החיסור המותנה בכפל ב- P), התוצאה היא ב- Z כדלהלן:
מספר הפעמים שיש להפעיל את אלגוריתם הכפל בהצפנה אחת של טקסט בגודל  p סיביות הוא  \left\lceil p/128\right\rceil +1. וכן אם יש מידע נלווה בגודל  q סיביות יש להוסיף  \left\lceil q/128\right\rceil +1 פעולות כפל. יתרה מזו, אם הזיכרון זמין, אפשר להאיץ את פעולת הכפל על ידי הכנה מוקדמת של טבלאות כפל. כלומר כדי לחשב את  X\cdot H אפשר להכין טבלה של תת-קבוצה של חזקות של  H. אם מחלקים את 128 הסיביות של  H ל-16 בתים, ומכינים 16 טבלאות  M_{0},...,M_{15} של 256 ערכים כל אחת, פעולת הכפל של  X כלשהו יכולה להיות:
הערך  X_{i} מתייחס לבית ה- i של  X. הרעיון הוא שאם מבודדים שמונה סיביות של  X כלשהו פעולת הכפל ב- H היא תוצאה אחת מתוך  2^{8} תוצאות אפשריות, כלומר 256 אלמנטים. אם מכפילים ב-16 מתקבל למעשה כל האפשרויות כאשר סך כל הזיכרון המנוצל הוא 65,536 בתים. ויקטור שופ הציע רעיון לצמצם את דרישות הזיכרון במחיר של חישוב ארוך יותר. אפשר להיפטר מכל הטבלאות  M_{i} למעט  M_{0} ולבצע את הכפל כדלהלן:
כלומר אפשר לבצע את הכפל ב- P^{8} רקורסיבית יחד עם פעולות XOR. וכן להיעזר בטבלה  M_{0} כדי לחשב את  x_{i}\cdot H. אולם תהיה בעיה של עם  P^{128} כי הוא חורג מגודל 16 בתים. אפשר להוסיף טבלה  R שתכלול את כפולות  x ב- P^{128}. בשיטת שופ אפשר לצמצם את דרישות הזיכרון של שתי הטבלאות  M_{0} ו- R לסך הכול 256 ועוד 64 בתים במחיר של מעט עבודה נוספת. להלן תיאור אלגוריתם שופ:
האלגוריתם להכנת הטבלה  M_{0} הוא:
באותה דרך אפשר להכין את יתר הטבלאות  M_{1},...,M_{15}.