Skip to content

Commit 1ca93bb

Browse files
committed
implement os.urandom
1 parent 803fc31 commit 1ca93bb

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixModuleBuiltins.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.io.InputStream;
3636
import java.io.InputStreamReader;
3737
import java.io.OutputStream;
38+
import java.math.BigInteger;
3839
import java.nio.ByteBuffer;
3940
import java.nio.channels.NonWritableChannelException;
4041
import java.nio.channels.SeekableByteChannel;
@@ -50,6 +51,7 @@
5051
import java.util.List;
5152
import java.util.Map;
5253
import java.util.Map.Entry;
54+
import java.util.Random;
5355
import java.util.Set;
5456

5557
import com.oracle.graal.python.builtins.Builtin;
@@ -894,4 +896,18 @@ int system(String cmd) {
894896
}
895897
}
896898
}
899+
900+
@Builtin(name = "urandom", fixedNumOfArguments = 1)
901+
@GenerateNodeFactory
902+
abstract static class URandomNode extends PythonBuiltinNode {
903+
@Specialization
904+
@TruffleBoundary
905+
PBytes urandom(int size) {
906+
// size is in bytes
907+
BigInteger bigInteger = new BigInteger(size * 8, new Random());
908+
// sign may introduce an extra byte
909+
byte[] range = Arrays.copyOfRange(bigInteger.toByteArray(), 0, size);
910+
return factory().createBytes(range);
911+
}
912+
}
897913
}

0 commit comments

Comments
 (0)