diff --git a/20230511/rsa-03.png b/20230511/rsa-03.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e57f33175351aea44b5da7bc50c1b6968308a7a
Binary files /dev/null and b/20230511/rsa-03.png differ
diff --git a/20230511/rsa-genkey-01.c b/20230511/rsa-genkey-01.c
new file mode 100644
index 0000000000000000000000000000000000000000..c38de73f1425a816f1afa9f307972a713fa8d67e
--- /dev/null
+++ b/20230511/rsa-genkey-01.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int e = 137;
+  int d = 2;
+  while ((d * e) % n != 1)
+    d++;
+  printf ("d = %d\n", d);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-02.c b/20230511/rsa-genkey-02.c
new file mode 100644
index 0000000000000000000000000000000000000000..32da9f4f07208bc3c6b66b616c2ddedeb59ca397
--- /dev/null
+++ b/20230511/rsa-genkey-02.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  loop: ;
+    int q = r0 / r1;
+    int r2 = r0 % r1;
+    int s2 = s0 - q * s1;
+    int t2 = t0 - q * t1;
+    if (r2 == 0)
+      {
+        *ggt = r2;
+        *ss = s2;
+        *tt = t2;
+        return;
+      }
+    r0 = r1;
+    s0 = s1;
+    r1 = r2;
+    s1 = s2;
+  goto loop;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int e = 137;
+  int d;
+  int t;
+  int ggt;
+  ext_eucl (e, n, &d, &t, &ggt);
+  printf ("d = %d\n", d);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-03.c b/20230511/rsa-genkey-03.c
new file mode 100644
index 0000000000000000000000000000000000000000..5286e8b913063dbc93c884b6412eaa00dd9312e0
--- /dev/null
+++ b/20230511/rsa-genkey-03.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  loop: ;
+    int q = r0 / r1;
+    int r2 = r0 % r1;
+    int s2 = s0 - q * s1;
+    int t2 = t0 - q * t1;
+    if (r2 == 0)
+      {
+        *ggt = r2;
+        *ss = s2;
+        *tt = t2;
+        return;
+      }
+    r0 = r1;
+    s0 = s1;
+    r1 = r2;
+    s1 = s2;
+  goto loop;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int e = 137;
+  int d;
+  int t;
+  int ggt;
+  ext_eucl (e, n, &d, &t, &ggt);
+  while (d < 0)
+    d += n;
+  printf ("d = %d\n", d);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-04.c b/20230511/rsa-genkey-04.c
new file mode 100644
index 0000000000000000000000000000000000000000..149c293e95eeac117839144be26143df06676161
--- /dev/null
+++ b/20230511/rsa-genkey-04.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  loop: ;
+    int q = r0 / r1;
+    int r2 = r0 % r1;
+    int s2 = s0 - q * s1;
+    int t2 = t0 - q * t1;
+    if (r2 == 0)
+      {
+        *ggt = r1;
+        *ss = s1;
+        *tt = t1;
+        return;
+      }
+    r0 = r1;
+    s0 = s1;
+    r1 = r2;
+    s1 = s2;
+  goto loop;
+}
+
+int main (void)
+{
+  int s, t, ggt;
+  ext_eucl (99, 78, &s, &t, &ggt);
+  printf ("s = %d, t = %d, ggT = %d\n", s, t, ggt);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-05.c b/20230511/rsa-genkey-05.c
new file mode 100644
index 0000000000000000000000000000000000000000..36d9850cb47d0488dafc632ee82b6739e258e1d4
--- /dev/null
+++ b/20230511/rsa-genkey-05.c
@@ -0,0 +1,38 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  loop: ;
+    int q = r0 / r1;
+    int r2 = r0 % r1;
+    int s2 = s0 - q * s1;
+    int t2 = t0 - q * t1;
+    if (r2 == 0)
+      {
+        *ggt = r1;
+        *ss = s1;
+        *tt = t1;
+        return;
+      }
+    r0 = r1;
+    s0 = s1;
+    t0 = t1;
+    r1 = r2;
+    s1 = s2;
+    t1 = t2;
+  goto loop;
+}
+
+int main (void)
+{
+  int s, t, ggt;
+  ext_eucl (99, 78, &s, &t, &ggt);
+  printf ("s = %d, t = %d, ggT = %d\n", s, t, ggt);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-06.c b/20230511/rsa-genkey-06.c
new file mode 100644
index 0000000000000000000000000000000000000000..652d45f34b8c7bdf3f6ea35ceefcaa1c2df0996f
--- /dev/null
+++ b/20230511/rsa-genkey-06.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  loop: ;
+    int q = r0 / r1;
+    int r2 = r0 % r1;
+    int s2 = s0 - q * s1;
+    int t2 = t0 - q * t1;
+    if (r2 == 0)
+      {
+        *ggt = r1;
+        *ss = s1;
+        *tt = t1;
+        return;
+      }
+    r0 = r1;
+    s0 = s1;
+    t0 = t1;
+    r1 = r2;
+    s1 = s2;
+    t1 = t2;
+  goto loop;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int e = 137;
+  int d;
+  int t;
+  int ggt;
+  ext_eucl (e, n, &d, &t, &ggt);
+  printf ("d = %d\n", d);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-07.c b/20230511/rsa-genkey-07.c
new file mode 100644
index 0000000000000000000000000000000000000000..740d45eb897b421314d74fed061bbc54561b8517
--- /dev/null
+++ b/20230511/rsa-genkey-07.c
@@ -0,0 +1,42 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  int r2 = r0 % r1;
+  while (r2)
+    {
+      int q = r0 / r1;
+      int s2 = s0 - q * s1;
+      int t2 = t0 - q * t1;
+      r0 = r1;
+      s0 = s1;
+      t0 = t1;
+      r1 = r2;
+      s1 = s2;
+      t1 = t2;
+      r2 = r0 % r1;
+    }
+  *ggt = r1;
+  *ss = s1;
+  *tt = t1;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int e = 137;
+  int d;
+  int t;
+  int ggt;
+  ext_eucl (e, n, &d, &t, &ggt);
+  printf ("d = %d\n", d);
+  return 0;
+}
diff --git a/20230511/rsa-genkey-08.c b/20230511/rsa-genkey-08.c
new file mode 100644
index 0000000000000000000000000000000000000000..b8d0d63efe2649c02ca07399a83be728098d0aa8
--- /dev/null
+++ b/20230511/rsa-genkey-08.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  int r2 = r0 % r1;
+  while (r2)
+    {
+      int q = r0 / r1;
+      int s2 = s0 - q * s1;
+      int t2 = t0 - q * t1;
+      r0 = r1;
+      s0 = s1;
+      t0 = t1;
+      r1 = r2;
+      s1 = s2;
+      t1 = t2;
+      r2 = r0 % r1;
+    }
+  *ggt = r1;
+  *ss = s1;
+  *tt = t1;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int d;
+  int t;
+  int ggt;
+  printf ("        e          d\n");
+  for (int e = 137; e < 256; e++)
+    {
+      ext_eucl (e, n, &d, &t, &ggt);
+      printf ("%10d %10d\n", e, d);
+    }
+  return 0;
+}
diff --git a/20230511/rsa-genkey-09.c b/20230511/rsa-genkey-09.c
new file mode 100644
index 0000000000000000000000000000000000000000..50e5a9ffa2edf51d2ee13f7a040a712f173e6596
--- /dev/null
+++ b/20230511/rsa-genkey-09.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  int r2 = r0 % r1;
+  while (r2)
+    {
+      int q = r0 / r1;
+      int s2 = s0 - q * s1;
+      int t2 = t0 - q * t1;
+      r0 = r1;
+      s0 = s1;
+      t0 = t1;
+      r1 = r2;
+      s1 = s2;
+      t1 = t2;
+      r2 = r0 % r1;
+    }
+  *ggt = r1;
+  *ss = s1;
+  *tt = t1;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int d;
+  int t;
+  int ggt;
+  printf ("        e          d        db\n");
+  for (int e = 137; e < 256; e++)
+    {
+      int db = 2;
+      while (db < n && (e * db) % n != 1)
+        db++;
+      ext_eucl (e, n, &d, &t, &ggt);
+      printf ("%10d %10d %10d\n", e, d, db);
+    }
+  return 0;
+}
diff --git a/20230511/rsa-genkey-10.c b/20230511/rsa-genkey-10.c
new file mode 100644
index 0000000000000000000000000000000000000000..55f7eee1133dd5b09aac63f478de46af02a6d299
--- /dev/null
+++ b/20230511/rsa-genkey-10.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  int r2 = r0 % r1;
+  while (r2)
+    {
+      int q = r0 / r1;
+      int s2 = s0 - q * s1;
+      int t2 = t0 - q * t1;
+      r0 = r1;
+      s0 = s1;
+      t0 = t1;
+      r1 = r2;
+      s1 = s2;
+      t1 = t2;
+      r2 = r0 % r1;
+    }
+  *ggt = r1;
+  *ss = s1;
+  *tt = t1;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int d;
+  int t;
+  int ggt;
+  printf ("        e          d        db\n");
+  for (int e = 137; e < 256; e++)
+    {
+      int db = 2;
+      while (db < n && (e * db) % n != 1)
+        db++;
+      ext_eucl (e, n, &d, &t, &ggt);
+      while (d < 0)
+        d += n;
+      printf ("%10d %10d %10d\n", e, d, db);
+    }
+  return 0;
+}
diff --git a/20230511/rsa-genkey-11.c b/20230511/rsa-genkey-11.c
new file mode 100644
index 0000000000000000000000000000000000000000..5c338148db70a1edb8ff9e62d3a159deeb5ea181
--- /dev/null
+++ b/20230511/rsa-genkey-11.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+
+void ext_eucl (int a, int b, int *ss, int *tt, int *ggt)
+{
+  int r0 = a;
+  int r1 = b;
+  int s0 = 1;
+  int s1 = 0;
+  int t0 = 0;
+  int t1 = 1;
+  int r2 = r0 % r1;
+  while (r2)
+    {
+      int q = r0 / r1;
+      int s2 = s0 - q * s1;
+      int t2 = t0 - q * t1;
+      r0 = r1;
+      s0 = s1;
+      t0 = t1;
+      r1 = r2;
+      s1 = s2;
+      t1 = t2;
+      r2 = r0 % r1;
+    }
+  *ggt = r1;
+  *ss = s1;
+  *tt = t1;
+}
+
+int main (void)
+{
+  int p = 11117;
+  int q = 11171;
+  int n = (p - 1) * (q - 1);
+  int d;
+  int t;
+  int ggt;
+  printf ("        e         ggT         d        db\n");
+  for (int e = 137; e < 256; e += 2)
+    {
+      int db = 2;
+      while (db < n && (e * db) % n != 1)
+        db++;
+      ext_eucl (e, n, &d, &t, &ggt);
+      while (d < 0)
+        d += n;
+      printf ("%10d %10d %10d %10d\n", e, ggt, d, db);
+    }
+  return 0;
+}
diff --git a/20230511/rsa.xcf.gz b/20230511/rsa.xcf.gz
index 99c800d647e8970e3a2576fe290d777464913638..43b1808cba4258247e056c6f9f465e1b86d5926b 100644
Binary files a/20230511/rsa.xcf.gz and b/20230511/rsa.xcf.gz differ