Fix likely-harmless undefined behavior surrounding volatile

The code was making two unsequenced reads from volatile locations.
This is undefined behavior. It was probably harmless because we didn't
care in what order the reads happened and the reads were from ordinary
memory, but UB is UB and IAR8 complained.
diff --git a/library/rsa.c b/library/rsa.c
index 8d55acd..a824c88 100644
--- a/library/rsa.c
+++ b/library/rsa.c
@@ -1037,7 +1037,11 @@
          * `offset` passes shift the data one byte to the left and
          * zero out the last byte. */
         for( n = 0; n < total - 1; n++ )
-            buf[n] = if_int( no_op, buf[n], buf[n+1] );
+        {
+            unsigned char current = buf[n];
+            unsigned char next = buf[n+1];
+            buf[n] = if_int( no_op, current, next );
+        }
         buf[total-1] = if_int( no_op, buf[total-1], 0 );
     }
 }